[英]Python: Write a list to a text file & text file size limit
很抱歉問題定義的冗長描述。
我是python的新手。 開始學習一個月左右。 今天我試圖將一個列表寫入文本文件。 雖然我在這個網站得到了答案並使用了相同的方法。 而且效果很好。 但是我在將列表寫入文本文件時遇到了另一個問題。
我的名單長度是'2372'。 當我將列表寫入文本文件時,按照我所需的特定格式,我發現只寫了幾個列表成員。 (格式為:第一行中的前四個列表成員。同樣,其余行中的4個列表成員組。)我發現只有1938個列表成員被寫入文本文件。 發現文件的大小為25KB。
我還嘗試在新行中編寫每個列表成員,然后發現文本文件的大小為25KB,這次寫入的成員甚至比上面的情況更少。
是否對寫入列表的文本文件有文件大小限制? 請幫我解決這個問題。
** python代碼的片段**
Lenlist = 2372
filptr = open(tempfile, 'w+')
count=0
for x in range(0,Lenlist):
filptr.write("%s\t" % line[x])
count+=1
if count>3:
if (count%4==0):
filptr.write("\n")
在列表上使用迭代會更容易:
with open(tempfile, 'w+') as filptr:
for count, l in enumerate(line):
filptr.write("%s\t" % l)
if count and count % 4 == 0:
filptr.write("\n")
使用with
語句可確保在循環完成時正確關閉文件。 使用enumerate
讓我們消除必須使用手動計數器。
請注意,現在您的行總是有一個\\t
額外的標簽。 您可以使用itertools.izip_longest()
技巧從列表中一次抓取4個項目,並將它們與'\\t'.join()
一起編寫:
from itertools import izip_longest
per_four = izip_longest(*([iter(line)] * 4), fillvalue='')
with open(tempfile, 'w+') as filptr:
for entries in per_four:
filptr.write("\t".join(entries) + '\n')
每次迭代時,我都會使用izip_longest
從列表中取出一個項目4次,直到原始列表用完為止。 為了確保無論列表的長度如何,最后我們都有4個項目,我們使用空字符串作為填充:
>>> line = [1, 2, 3, 4, 5]
>>> for four in izip_longest(*([iter(line)] * 4), fillvalue=''):
... print four
...
(1, 2, 3, 4)
(5, '', '', '')
像這樣的東西,使用發電機:
lis=[1,2,3,,,,,] #your list
with open(filename,'w') as f:
for y in (lis[x:x+4] for x in range(0,len(lis),4):
f.write("%s\n",y)
如:
In [34]: lis=range(20)
In [35]: [lis[x:x+4] for x in range(0,len(lis),4)]
Out[35]:
[[0, 1, 2, 3],
[4, 5, 6, 7],
[8, 9, 10, 11],
[12, 13, 14, 15],
[16, 17, 18, 19]]
問題是文件寫入是緩沖的,因此它們不會立即寫入磁盤。 如果在不關閉文件的情況下退出,則可能根本不會寫入它們(由於缺乏確定性GC,在Jython和Pypy中尤其有問題)。
如果你有Python 2.6或更高版本,你可以使用with
語句在完成后自動關閉文件。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.