1

私は Python スクリプトを書いていますが、一連の非常に小さなテキスト ファイルの 2 行目が必要です。現在行っているように、ファイルをハードドライブに保存せずにこれを抽出したいと思います。

TempFile および StringIO モジュールを参照するスレッドをいくつか見つけましたが、あまり意味がありませんでした。

現在、すべてのファイルをダウンロードし、1.txt、2.txt などのように順番に名前を付けてから、すべてを調べて 2 行目を抽出します。ファイルを開き、行を取得してから、次のファイルを見つけて開き、読み取りに進みたいと思います。

HDDへの書き込みで現在行っていることは次のとおりです。

while (count4 <= num_files):
    file_p = [directory,str(count4),'.txt']
    file_path = ''.join(file_p)        
    cand_summary = string.strip(linecache.getline(file_path, 2))
    linkFile = open('Summary.txt', 'a')
    linkFile.write(cand_summary)
    linkFile.write("\n")
    count4 = count4 + 1
    linkFile.close()
4

2 に答える 2

0

反復ごとに出力ファイルを開いたり閉じたりします。

単純にやってみませんか

with open("Summary.txt", "w") as linkfile:
    while (count4 <= num_files):
        file_p = [directory,str(count4),'.txt']
        file_path = ''.join(file_p)        
        cand_summary = linecache.getline(file_path, 2).strip() # string module is deprecated
        linkFile.write(cand_summary)
        linkFile.write("\n")
        count4 = count4 + 1

また、linecache複数のファイルから同じ行を読み取るのではなく、同じファイルから複数の行を読み取るように最適化されているため、ここではおそらく適切なツールではありません。

代わりに、

with open(file_path, "r") as infile:
    dummy = infile.readline()
    cand_summary = infile.readline.strip()

また、strip()メソッドを削除した場合、を再度追加する必要はありませんが、\nなぜそこにあるのかは誰にもわかりません。おそらく.lstrip()もっと良いでしょうか?

最後に、手動のwhileループとは何ですか?forループを使用してみませんか?

最後に、コメントの後で、結果をファイルではなくリストに入れたいと思います。わかった。

概して:

summary = []
for count in xrange(num_files):
    file_p = [directory,str(count),'.txt'] # or count+1, if you start at 1
    file_path = ''.join(file_p)        
    with open(file_path, "r") as infile:
        dummy = infile.readline()
        cand_summary = infile.readline().strip()
        summary.append(cand_summary)
于 2011-09-30T20:13:45.540 に答える
0

append()ファイルの書き込みをリスト上のへの呼び出しに置き換えるだけです。例えば:

summary = []
while (count4 <= num_files):
    file_p = [directory,str(count4),'.txt']
    file_path = ''.join(file_p)        
    cand_summary = string.strip(linecache.getline(file_path, 2))
    summary.append(cand_summary)
    count4 = count4 + 1

余談ですが、通常は.と書きcount += 1ます。count4また、 1ベースのインデックスを使用しているように見えます。これはPythonではかなり珍しいようです。

于 2011-09-30T20:16:17.853 に答える