0

問題定義の説明が長くなって申し訳ありません。

私はpythonが初めてです。習い始めて約1ヶ月。今日、私はリストをテキストファイルに書き込もうとしていました。このサイトで答えを得て、同じ方法を使用しましたが。そして、それはうまくいきました。しかし、リストをテキスト ファイルに書き込んでいるときに別の問題が発生しました。

私のリストの長さは「2372」です。リストをテキスト ファイルに書き込むと、必要な特定の形式でリスト メンバーがほとんど書き込まれていないことがわかりました。(形式: 最初の行の最初の 4 つのリスト メンバー。同様に、残りの行の 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")
4

3 に答える 3

2

リストに対して iterate を使用する方が簡単です。

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, '', '', '')
于 2012-09-25T13:27:32.903 に答える
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]]
于 2012-09-25T13:29:05.440 に答える
0

問題は、ファイルの書き込みがバッファリングされるため、すぐにディスクに書き込まれないことです。ファイルを閉じずに終了すると、それらはまったく書き込まれない可能性があります (特に Jython と Pypy では決定論的 GC がないため問題があります)。

Python 2.6 以降を使用している場合は、withステートメントを使用して、完了時にファイルを自動的に閉じることができます。

于 2012-09-25T13:29:13.830 に答える