記一次python3 大檔案解壓和操作

2021-08-09 22:17:14 字數 2337 閱讀 3428

先說下:所謂的大檔案並不是壓縮檔案有多大,幾十兆的檔案而是解壓後幾百兆。其中就遇到解壓不成功的情況.、讀小檔案時成功,大檔案時失敗等

defunzip_to_txt_plus(zipfilename):

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)

注意引數:『ignore』 ,因為預設是嚴格編碼,如果不加這個引數就會報錯。

因為該函式已經把檔案編成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...