Python3操作文件(CSV、Excel)


# -*- encoding: utf-8 -*-
# -*- coding: gbk -*-
"""
@File : 文件操作.py
@Date : 2019/8/7
@Time : 18:54
@Author : W M
@Software: PyCharm
"""
# CSV文件的讀取和寫入
# 讀取CSV文件的第一種方法
import pandas as pd

df=pd.read_csv('222.csv',encoding="utf-8")

print(df.head()) #head()默認展示前5行
print("\n")
print("df總共有"+str(len(df)) + "行記錄")
print("\n")

#數據框
print("#指定序號作為index")
# 序號指定為index
df1=pd.read_csv('222.csv',encoding='utf-8',index_col='序號') #指定序號作為index
print(df1.head())
print("\n")
print("df1總共有"+str(len(df1)) + "行記錄")

print("\n")

print("#指定顯示前3行數據\n")
df2=pd.read_csv('222.csv',encoding='utf-8',index_col='序號',nrows=3) #指定顯示前3行數據
print(df2)

print("\n")
# 讀取CSV文件的第二種方法

df3=pd.read_table('222.csv',encoding='utf-8',sep=',') # sep=',' 指定分隔符為英文逗號,tab則為\t
print(df3.head())

# 如果只有數字,沒有表頭
print("\n")
df4=pd.read_csv('111.csv',encoding='utf-8',header=None) #header默認無表頭
print(df4.head())
#自定義指定表頭名稱
mynames=['一','二','三','四','五','六','七','八','九']

df5=pd.read_csv('111.csv',encoding='utf-8',header=None,names=mynames) #header默認無表頭
print(df5.head())

##導出到csv文件
df1.to_csv('mydata.csv',encoding='gbk')
# 追加寫入
df4.to_csv('mydata.csv',encoding='utf-8',mode='a')

print("\n")
# 讀取CSV文件的第三種方法
import csv
from datetime import datetime
from matplotlib import pyplot as plt
'''導入模塊csv以打開CSV格式的文件'''

filename = 'sitka_weather_2014.csv'
with open(filename) as f:
reader = csv.reader(f)
header_row = next(reader)
print(header_row)



##Excel文件讀取和寫入
##-------------------------------------------------------------------------------------------
##-------------------------------------------------------------------------------------------
# 操作Excel的第一種方法:openpyxl
print("\n#openpyxl讀取Excel的第一種方法")
#pip3 install openpyxl
import openpyxl
workbook=openpyxl.load_workbook('ceshi.xlsx')
worksheet=workbook.get_sheet_by_name('Sheet2')
row3=[item.value for item in list(worksheet.rows)[2]]
print("第三行的值:",row3) #第三行的值: ['sun', 18, '女', '1992-12']

print("\n")
col3=[item.value for item in list(worksheet.columns)[2]] #第三列的值
# for i in list(worksheet.columns): #列表有4列,分別是A1-A4、B1-B4、C1-C4、D1-D4
# print(i)
print("第三列的值:",col3)
print("\n")

cell_2_4=worksheet.cell(row=2,column=4).value
print("第2行第4列值:",cell_2_4) #1992-11

max_row=worksheet.max_row
print('最大行',max_row) #總共8行

# openpyxl寫入excel
print("\n# openpyxl寫入excel")
import openpyxl
workbook=openpyxl.Workbook() #W大寫Workbook
sheet=workbook.active
sheet['A1']='wang,mm'
workbook.save('new.xlsx')

##-------------------------------------------------------------------------------------------
##-------------------------------------------------------------------------------------------

#操作Excel的第二種方法:xlrd和xlwt
print("\n#操作Excel的第三種方法:xlrd和xlwt")
# pip3 install xlwt
# 利用xlrd和xlwt進行excel讀寫(xlwt不支持xlsx,僅支持xls文件)

import xlrd #讀取
book=xlrd.open_workbook('ceshi.xlsx')
sheet1=book.sheets()[0]
nrows=sheet1.nrows
print("表格總行數:",nrows) #18行

ncols = sheet1.ncols
print('表格總列數:',ncols)

row3_values = sheet1.row_values(2)
print('第3行值:',row3_values) #[2.0, 18203.0, 'dandelion-alipaymobile']

col3_values = sheet1.col_values(2)
print('第3列值',col3_values)

cell_3_3 = sheet1.cell(2,2).value
print('\n第3行第3列的單元格的值:',cell_3_3)

# xlwt寫excel
print("\nxlwt寫入excel")
import xlwt #寫入 # 貌似不支持excel 2007的xlsx格式
workbook=xlwt.Workbook()
worksheet=workbook.add_sheet("test") #sheet名稱為test
worksheet.write(0,0,'Aidata')
workbook.save('xlswrite.xls')

##-------------------------------------------------------------------------------------------
##-------------------------------------------------------------------------------------------

#excel文件和pandas的交互讀寫,讀取主要使用到pandas中的兩個個函數,一個是pd.ExcelFile()函數和pd.read_excel(),寫入用的是to_excel()函數

#操作Excel的第三種方法:pandas
print("\n#操作Excel的第三種方法:pandas")
##pandas讀取Excel的第一種方法--根據sheet頁讀取pd.ExcelFile()
xls_file=pd.ExcelFile('ceshi.xlsx') #加載讀取Excel
print(xls_file.sheet_names) #顯示出讀入excel文件中的表名字
# ['Sheet1', 'Sheet2', 'Sheet3']

xls_data=xls_file.parse('Sheet2',index_col='姓名') #根據表名及列名為索引展示
print(xls_data.head()) #默認展示前5行


##pandas讀取Excel的第二種方法--直接讀取pd.read_excel()
#方式一:默認讀取第一個表單
print("\n方式一:")
xls_data=pd.read_excel('ceshi.xlsx',index_col='序列') #index_col 分行編號
# #這個會直接默認讀取到這個Excel的第一個表單
print(xls_data.head()) #默認讀取前5行的數據
# print("輸出:\n{0}".format(xls_data.head()))#格式化輸出

#方式二:通過指定表單名的方式來讀取
print("\n方式二:")
df=pd.read_excel('ceshi.xlsx',sheet_name='Sheet2')
data=df.head() #默認讀取前5行的數據
print("獲取到所有的值:\n{0}".format(data))#格式化輸出

#方式三:通過表單索引來指定要訪問的表單,0表示第一個表單
#也可以采用表單名和索引的雙重方式來定位表單
#也可以同時定位多個表單,方式都羅列如下所示
print("\n方式三:")
# df=pd.read_excel('ceshi.xlsx',sheet_name=['Sheet1','Sheet2'])
#可以通過表單名同時指定多個--不推薦使用,效果不好
# df=pd.read_excel('ceshi.xlsx',sheet_name=['Sheet2',0])
#可以混合的方式來指定--不推薦使用,效果不好

# df=pd.read_excel('ceshi.xlsx',sheet_name=1)
#可以通過表單索引來指定讀取的表單--列表形式

# df=pd.read_excel('ceshi.xlsx',sheet_name=[0,1])
#可以通過索引 同時指定多個--不推薦使用,效果不好

data=df.values #獲取所有的數據,注意這里不能用head()方法哦~
print("獲取到所有的值:\n{0}".format(data))#格式化輸出
# 以上讀取的數據是一個二維矩陣,不利於處理自動化測試,

# pandas操作Excel的行列
''' loc——通過行標簽索引行數據
iloc——通過行號索引行數據 '''
print("\npandas操作Excel的行列")
# 1:讀取指定的單行,數據會存在列表里面
df=pd.read_excel('ceshi.xlsx')
data1=df.loc[0].values #0表示第一行 這里讀取數據並不包含表頭,要注意哦!
print("讀取指定的單行數據:\n{0}".format(data1))

print("\n2:讀取指定的多行,數據會存在嵌套的列表里面:")
# 2:讀取指定的多行,數據會存在嵌套的列表里面:
df=pd.read_excel('ceshi.xlsx')
data2=df.loc[[1,2]].values
print("讀取指定的多行數據:\n{0}".format(data2))

print("\n3:讀取指定的行列")
# 3:讀取指定的行列:
df=pd.read_excel('ceshi.xlsx')
data3=df.iloc[1,2]
print("讀取指定行列的數據:\n{0}".format(data3)) #dandelion-alipaymobile

# 4:讀取指定的多行多列值:
print("\n4:讀取指定的多行多列值:")
df=pd.read_excel('ceshi.xlsx',sheet_name='Sheet2')
data4=df.loc[[1,2],['姓名','年齡','性別']]
print("讀取多行多列的數據:\n{0}".format(data4))
# 姓名 年齡 性別
# 1 sun 18 女
# 2 zhao 19 男

# 5:獲取所有行的指定列
print("\n5:獲取所有行的指定列")
df=pd.read_excel('ceshi.xlsx',sheet_name='Sheet2')
data5=df.loc[:,['姓名','年齡','性別']].values #得到的是嵌套列表
data6=df.loc[:,['姓名','年齡','性別']] #得到二維矩陣

print("獲取所有行的指定列的數據:\n{0}".format(data5)) #得到的是嵌套列表
print("獲取所有行的指定列的數據:\n{0}".format(data6)) #得到二維矩陣

# 6:獲取行號並打印輸出
print("\n6:獲取行號並打印輸出")
df=pd.read_excel('ceshi.xlsx',sheet_name='Sheet2')
print("輸出行號列表:",df.index.values)
# 輸出行號列表: [0 1 2 3 4 5 6]

# 7:獲取列名並打印輸出
print("\n7:獲取列名並打印輸出")
df=pd.read_excel('ceshi.xlsx',sheet_name='Sheet2')
print("輸出標題:",df.columns.values)

# 輸出標題: ['姓名' '年齡' '性別' '出生日期']

# 8:隨機獲取幾行數的值:
print("\n8:獲取指定行數的值:")
df=pd.read_excel('ceshi.xlsx',sheet_name='Sheet2')
print("輸出值:\n",df.sample(3).values) #隨機抽取3行查看,這個方法類似於head()方法以及df.values方法

# [['liu' 23 '女' '1995-05']
# ['wang' 17 '男' '1992-11']
# ['li' 20 '男' '1992-09']]

# 9:獲取指定列的值:
print("\n9:獲取指定列的值:")
df=pd.read_excel('ceshi.xlsx',sheet_name='Sheet2')
print("輸出值:\n",df['姓名'].values)

# pandas處理Excel數據成為字典
print("\npandas處理Excel數據成為字典")
df=pd.read_excel('ceshi.xlsx',sheet_name="Sheet2")
test_data=[]
for i in df.index.values: #獲取行號的索引,並對其進行遍歷:
# 根據i來獲取每一行指定的數據 並利用to_dict轉成字典
row_data=df.loc[i,['姓名','年齡','性別','出生日期']].to_dict()
test_data.append(row_data)
print(test_data)

# [{'姓名': 'wang', '年齡': 17, '性別': '男', '出生日期': '1992-11'}, {'姓名': 'sun', '年齡': 18, '性別': '女', '出生日期': '1992-12'}, {'姓名': 'zhao', '年齡': 19, '性別': '男', '出生日期': '1993-01'}, {'姓名': 'zhang', '年齡': 22, '性別': '女', '出生日期': '1994-05'}, {'姓名': 'zhou', '年齡': 16, '性別': '女', '出生日期': '1992-07'}, {'姓名': 'liu', '年齡': 23, '性別': '女', '出生日期': '1995-05'}, {'姓名': 'li', '年齡': 20, '性別': '男', '出生日期': '1992-09'}]


print("\n")

##寫入到Excel .to_excel()
xls_data.to_excel('my.xlsx')

#寫入表格
read_excel = pd.ExcelWriter('data.xlsx')
xls_data.to_excel(read_excel,sheet_name='ceshi',index=True)
read_excel.save()





免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM