5

私はPythonを初めて使用し、Pythonが変数とリスト内の変数の配列を処理する方法は、私にはまったく異質です。私は通常、テキストファイルをベクトルに読み込み、ベクトルのサイズを決定して最後の3つを新しい配列/ベクトルにコピーし、forループで最後のサイズ3のコピー関数を新しい配列にループします。

Pythonでforループがどのように機能するかわからないので、それができません。

これまでのところ:

    #read text file into line list
            numberOfLinesInChat = 3
    text_file = open("Output.txt", "r")
    lines = text_file.readlines()
    text_file.close()
    writeLines = []
    if len(lines) > numberOfLinesInChat:
                    i = 0
        while ((numberOfLinesInChat-i) >= 0):
            writeLine[i] = lines[(len(lines)-(numberOfLinesInChat-i))]
                            i+= 1

    #write what people say to text file
    text_file = open("Output.txt", "w")
    text_file.write(writeLines)
    text_file.close()
4

5 に答える 5

12

ファイルの最後の3行を効率的に取得するには、次を使用しますdeque

from collections import deque

with open('somefile') as fin:
    last3 = deque(fin, 3)

これにより、ファイル全体をメモリに読み込んで、実際には不要なものを切り取ることができます。

あなたのコメントを反映するために-あなたの完全なコードは次のようになります:

from collections import deque

with open('somefile') as fin, open('outputfile', 'w') as fout:
    fout.writelines(deque(fin, 3))
于 2013-03-26T21:33:21.550 に答える
3

すべてのファイル行をメモリに保持しても問題がない限り、行のリストをスライスして最後のx個のアイテムを取得できます。http://docs.python.org/2/tutorial/introduction.htmlを参照して、「スライス表記」を検索してください。

def get_chat_lines(file_path, num_chat_lines):
    with open(file_path) as src:
        lines = src.readlines()
        return lines[-num_chat_lines:]


>>> lines = get_chat_lines('Output.txt', 3)
>>> print(lines)
... ['line n-3\n', 'line n-2\n', 'line n-1']
于 2013-03-26T21:19:02.610 に答える
0

最初にあなたの質問に答えると、私の推測では、インデックスエラーが発生したので、writeLine [i]の行をwriteLine.append()に置き換える必要があります。その後、出力を書き込むためにループも実行する必要があります。

text_file = open("Output.txt", "w")
for row in writeLine :
    text_file.write(row)
text_file.close()

これを書くためのよりPython的な方法を提案してもいいですか?次のようになります:

with open("Input.txt") as f_in, open("Output.txt", "w") as f_out :
    for row in f_in.readlines()[-3:] :
        f_out.write(row)
于 2013-03-26T21:15:58.933 に答える
0

考えられる解決策:

lines = [ l for l in open("Output.txt")]
file = open('Output.txt', 'w')
file.write(lines[-3:0])
file.close()
于 2013-03-26T21:30:22.563 に答える
0

Pythonの構文がわからない場合は、これが少し明確になる可能性があります。

lst_lines = lines.split()

これにより、テキストファイルのすべての行を含むリストが作成されます。

次に、最後の行に対して次のことができます。

last = lst_lines [-1] secondLAst =lst_lines[-2]など...リストと文字列のインデックスは最後から「-」で到達できます。

または、それらをループして、以下を使用して特定のものを印刷することができます。

start =開始行、stop =終了する場所、step=何をインクリメントするか。

for i in range(start、stop-1、step):string = lst_lines [i]

次に、それらをファイルに書き込むだけです。

于 2013-03-26T22:27:14.160 に答える