簡體   English   中英

Python:將列表寫入文本文件和文本文件大小限制

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM