Python:将列表写入文本文件&文本文件大小限制

时间:2012-09-25 13:24:22

标签: python list

对于问题定义的冗长描述感到抱歉。

我是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")

3 个答案:

答案 0 :(得分:2)

在列表上使用迭代会更容易:

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个项目,我们使用空字符串作为填充:

>>> line = [1, 2, 3, 4, 5]
>>> for four in izip_longest(*([iter(line)] * 4), fillvalue=''):
...     print four
... 
(1, 2, 3, 4)
(5, '', '', '')

答案 1 :(得分:0)

这样的东西,使用生成器:

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]]

答案 2 :(得分:0)

问题是文件写入是缓冲的,因此它们不会立即写入磁盘。如果你在没有关闭文件的情况下退出,它们可能根本不会被写入(尤其是由于缺乏确定性GC而在Jython和Pypy中存在问题)。

如果你有Python 2.6或更高版本,你可以使用with语句在完成后自动关闭文件。