大家做在數(shù)據(jù)處理的時(shí)候,肯定難免會(huì)與文件交互救军,那么對(duì)于指定的文件類型财异,我們?nèi)绾尾僮髂兀?/p>
1.python讀寫csv文件
import csv
#python2可以用file替代open
with open('test.csv','w') as csvFile:
writer = csv.writer(csvFile)
#先寫columns_name
writer.writerow(["index","a_name","b_name"])
#寫入多行用writerows
writer.writerows([[1,2,3],[0,1,2],[4,5,6]])
#用reder讀取csv文件
with open('test.csv','r') as csvFile:
reader = csv.reader(csvFile)
for line in reader:
print line
一定要注意,csv文件在寫入時(shí)唱遭,字段和字段之間是用逗號(hào)“”戳寸,“”分割的,如果稍微不注意拷泽,就會(huì)出現(xiàn)串行的情況疫鹊。
2.python讀寫excel文件
import xlwt
#創(chuàng)建工作簿
f = xlwt.Workbook()
'''
創(chuàng)建第一個(gè)sheet:
sheet1
'''
#創(chuàng)建sheet
sheet1 = f.add_sheet(u'sheet1',cell_overwrite_ok=True)
row0 = [u'編號(hào)',u'單位',u'網(wǎng)站備案號(hào)',u'域名',u'外鏈名稱',u'不良網(wǎng)站名',u'不良url地址',u'地市',u'ip地址',u'截圖',u'備注',u'審核時(shí)間',u'父鏈接',u'源碼超鏈接']
#生成第一行
for i in range(0,len(row0)):
sheet1.write(0,i,row0[i]) # 順序?yàn)閤行x列寫入第x個(gè)元素
f.save('newfile.xls')
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# 讀取excel數(shù)據(jù)
import xlrd
data = xlrd.open_workbook('test.xls') # 打開xls文件
table = data.sheets()[0] # 打開第一張表
nrows = table.nrows # 獲取表的行數(shù)
for i in range(nrows): # 循環(huán)逐行打印
if i == 0: # 跳過第一行
continue
print table.row_values(i)
3.python讀寫txt文件
#第一種
with open("test.txt","r","utf-8") as f:
# 為a+模式時(shí),因?yàn)闉樽芳幽J降耄羔樢呀?jīng)移到文尾订晌,讀出來的是一個(gè)空字符串。
ftext = f.read() # 一次性讀全部成一個(gè)字符串
ftextlist = f.readlines() # 也是一次性讀全部蚌吸,但每一行作為一個(gè)子句存入一個(gè)列表
#第二種
f = open('test.txt', 'r', 'utf-8')
ftext = f.read() # 一次性讀取完成
ftextlist = f.readlines() # 同上
fline = f.readline() # 只讀取1行
f.close() # 關(guān)閉文件
# 寫入txt
f = open('test.txt', 'ab', 'utf-8') # 在文件存在內(nèi)容的時(shí)候追加
f = open('test.txt', 'wb', 'utf-8') # 文件存在時(shí)直接覆蓋锈拨,沒有就創(chuàng)建文件寫入
f.write('aa') # 文件寫入內(nèi)容
f.close()
# 第二種
with open('test.txt', 'a') as f: # 道理同上
f.write('aa')
with open('test.txt', 'w') as f: # 道理同上
f.write('aa')
接下來說說with open 和 open的區(qū)別:
區(qū)別:
用open去打開一個(gè)文件進(jìn)行讀取,假設(shè)文件不存在的話羹唠,比如打開文件 aaaa
如果文件不存在奕枢,open()函數(shù)就會(huì)拋出一個(gè)IOError的錯(cuò)誤,并且給出錯(cuò)誤碼和詳細(xì)的信息告訴你文件不存在佩微!
如果文件打開成功缝彬,接下來,調(diào)用read()方法可以一次讀取文件的全部?jī)?nèi)容哺眯,Python把內(nèi)容讀到內(nèi)存谷浅,用一個(gè)str對(duì)象表示
>>> f.read()
'Hello, world!'
最后一步是調(diào)用close()方法關(guān)閉文件。文件使用完畢后必須關(guān)閉奶卓,因?yàn)槲募?duì)象會(huì)占用操作系統(tǒng)的資源一疯,并且操作系統(tǒng)同一時(shí)間能打開的文件數(shù)量也是有限的:
f.close()
由于文件讀寫時(shí)都有可能產(chǎn)生IOError,一旦出錯(cuò)夺姑,后面的f.close()就不會(huì)調(diào)用墩邀。所以,為了保證無論是否出錯(cuò)都能正確地關(guān)閉文件盏浙,我們可以使用try ... finally來實(shí)現(xiàn):
try:
f = open('/path/to/file', 'r')
print(f.read())
finally:
if f:
f.close()
但是每次都這么寫實(shí)在太繁瑣眉睹,所以荔茬,Python引入了with語句來自動(dòng)幫我們調(diào)用close()方法:
with open('/path/to/file', 'r') as f:
print(f.read())
這和前面的try ... finally是一樣的,但是代碼更佳簡(jiǎn)潔竹海,并且不必調(diào)用f.close()方法慕蔚。
總結(jié):以后讀寫文件都使用with open語句,不要再像以前那樣用f = open()這種語句了!