先說下:所謂的大檔案並不是壓縮檔案有多大,幾十兆的檔案而是解壓後幾百兆。其中就遇到解壓不成功的情況.、讀小檔案時成功,大檔案時失敗等
defunzip_to_txt_plus(zipfilename):注意引數:『ignore』 ,因為預設是嚴格編碼,如果不加這個引數就會報錯。zfile = zipfile.zipfile(zipfilename,
'r')
forfilenameinzfile.namelist():
data = zfile.read(filename)
# data = data.decode('gbk').encode('utf-8')
data = data.decode('gbk'
, 'ignore').encode('utf-8')
file = open(filename,
'w+b')
file.write(data)
file.close()
if__name__ == '__main__':
zipfilename = "e:
\\share
\\python_excel
\\zip_to_database
\\20171025.zip"
unzip_to_txt_plus(zipfilename)
因為該函式已經把檔案編成utf-8 所以後面讀取檔案時成功,下面貼出讀取大檔案**(忽略資料庫相關)
# - coding: utf-8 -經過對比,發現兩個速度基本一樣快。兩百萬行的資料是沒壓力的。importcsv
importlinecache
importxlrd
importmysqldb
deftxt_todatabase(filename, linenum):
# with open(filename, "r", encoding="gbk") as csvfile:
# read = csv.reader(csvfile)
# count =0
# for i in read:
# # print(i)
# count += 1
# # print('hello')
# print(count)
count = linecache.getline(filename, linenum)
print(count)
# with open("new20171028.csv", "w", newline="") as datacsv:
# # dialect為開啟csv檔案的方式,預設是excel,delimiter="\t"引數指寫入的時候的分隔符
# csvwriter = csv.writer(datacsv, dialect=("excel"))
# # csv檔案插入一行資料,把下面列表中的每一項放入乙個單元格(可以用迴圈插入多行)
# csvwriter.writerow(["a", "b", "c", "d"])
defbigtxt_read(filename):
withopen(filename,
'r',
encoding='utf-8')asdata:
count =0
while1:
count += 1
line = data.readline()
if1000000 == count:
print(line)
if notline:
breakprint(count)
if__name__ == '__main__':
filename = '20171025.txt'
txt_todatabase(filename,
1000000)
bigtxt_read(filename)
Python3 讀取大檔案
1 方法一 將檔案切分成小段,每次處理完小段內容後,釋放記憶體 這裡會使用yield生成自定義可迭代物件,即generator,每乙個帶有yield的函式就是乙個generator。def read in block file path block size 1024 with open file ...
記一次python3中檔案沒有及時重新整理到檔案的問題
今天做python3 的with open聯絡,發現程式寫入到檔案中,但是檔案內容並沒有更新。一直都是老的內容。嘗試file.flush等等方式都是不行。於是最後發現,檔案只是檢視的時候沒有改變,只是有些延遲,具體原因沒搞清楚。而且只在我的w7電腦有這個結果 在使用的時候所以注意以下就行。1.檔案已...
python3第一次作業
需要乙個檔案users,裡面有使用者名稱密碼以及是否鎖定的識別符號 lzd 123 1 wdl 123 0 lw 123 0 aaa 123 0 bbb 123 0 ccc 123 1 ddd 123 0 eee 123 0 fff 123 0 ggg 123 0 hhh 123 0 adc 123...