1. 程式人生 > >python 讀寫檔案 把爬取的圖片資訊寫入檔案

python 讀寫檔案 把爬取的圖片資訊寫入檔案

1.開啟檔案時,file 和io.open的區別

file :如果檔案不存在直接報錯
open :如果檔案不存在先建立檔案再進行寫入

2.把字串寫入csv檔案

ab+ 追加內容到csv檔案 ab 追加內容到csv檔案但是第一行會空出來 wb 普通的讀寫csv檔案 但是再次執行會覆蓋以前的內容

import csv

print  '把字串寫入csv檔案'
list =['1','2','3' ]
csvfile=file('F:\\images\\test.csv','ab+')
writer =csv.writer(csvfile)
writer.writerow(['Column12'
, 'Column2', 'Column3']) lines = [range(3) for i in range(5)] print lines #[[0, 1, 2], [0, 1, 2], [0, 1, 2], [0, 1, 2], [0, 1, 2]] for line in lines: writer.writerow(line) #寫入的list list裡面是的元素是字串 一行一行的寫入 #writer.writerow(list) #一次性直接全部寫入

檔案中會出現5行資料為0,1,2 和頭行為Column12, Column2, Column3的檔案

3.把日期當作檔名,把list 寫入檔案

time.strftime(‘%Y-%m-%d’,time.localtime(time.time())):like 2018-02-17

import time
import sys
reload(sys)
sys.setdefaultencoding( "utf-8" )


print '獲取當前時間'
print time.time()
print time.localtime(time.time())
print time.strftime('%Y-%m-%d',time.localtime(time.time()))

length=len(soup.find_all('img'
)) d=soup.find_all('img') list=[] print '寫入檔案' csvfile=io.open('F:\\images\\'+time.strftime('%Y-%m-%d',time.localtime(time.time()))+'.csv','ab+') writer =csv.writer(csvfile) for x in range(length): # print d[x].attrs['alt'] if(d[x].attrs.has_key('alt')): string=d[x].attrs['src']+'|'+ d[x].attrs['alt'] print string list.append(d[x].attrs['src']+'|'+ d[x].attrs['alt']) #list 存入字串含中文時,實際是存的unicode 編碼 \uxxxx print list writer.writerow(list) list.pop() csvfile.close() print '讀取檔案' for line in open('F:\\images\\'+time.strftime('%Y-%m-%d',time.localtime(time.time()))+'.csv'): print line

4.字串寫入檔案時出現UnicodeEncodeError: ‘ascii’ codec can’t encode characters in position

將字串寫入文字時出現解決UnicodeEncodeError: ‘ascii’ codec can’t encode characters in position
解決辦法:
在開頭加上

import sys
reload(sys)
sys.setdefaultencoding( "utf-8" )

**然後寫入檔案成功但是檔案中時 ,中文又是亂碼 直接開啟csv檔案亂碼 使用notepad++開啟時 是正常顯示的
,python在讀取檔案的時控制檯是正常顯示的 ,在java程式中讀取也是顯示正常的 查資料顯示是windows系統的問題**