大家做在數(shù)據(jù)處理的時(shí)候,肯定難免會(huì)與文件交互,那么對于指定的文件類型,我們?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í),字段和字段之間是用逗號“”,“”分割的,如果稍微不注意,就會(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'編號',u'單位',u'網(wǎng)站備案號',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()方法可以一次讀取文件的全部內(nèi)容,Python把內(nèi)容讀到內(nèi)存,用一個(gè)str對象表示
>>> f.read()
'Hello, world!'
最后一步是調(diào)用close()方法關(guān)閉文件。文件使用完畢后必須關(guān)閉,因?yàn)槲募ο髸?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是一樣的,但是代碼更佳簡潔,并且不必調(diào)用f.close()方法。
總結(jié):以后讀寫文件都使用with open語句,不要再像以前那樣用f = open()這種語句了!