0

そのため、ファイルをアルファベット順にソートする必要がありますが、これは私の問題ではありません。それはできますが、私の問題は、その並べ替えられたリストを新しいファイルに書き込むことです。これが私が持っているものです。

import os
os.chdir("/Users/User/Documents") #(I put my name where it says "User")

user_file = open("info.txt", "r")
file = user_file.read()
file_string = file.split("\n")

file_string.sort()
print(file_string) #This is here just so I can see that it sorted correctly

end_file = open("write.txt", "w")
for item in file_string:
    end = end_file.write(str(item))
    print(end)

さて、私の info.txt はアルファベット順に並べる必要があるもので、色のリストです。だから私の最後の4行は私が苦労しているところです。file_string の各項目を取得して新しいファイルに書き込もうとしていますが、print(end) でそれらの文字数がわかります。私は何を間違っていますか?ありがとう

4

3 に答える 3

2

代わりに、このようにしてみてください。はい、これが完全な解決策です。

import os
os.chdir(r'C:\Users\<username>\Documents')
lines = open("info.txt", "r").readlines()
lines.sort()
with open("write.txt", "w") as out:
    out.writelines(lines)
于 2013-10-02T19:43:44.607 に答える
0

このwrite()メソッドは書き込まれたバイト数を返すため、設計どおりに機能しています。

ただし、ファイルに改行を書き込みたい場合 (改行で分割するときに元のファイルからそれらを削除したため)、それを閉じることを忘れてはなりません。

for item in file_string:
    end_file.write(item + "\n")
end_file.close()

正しく動作します。

ただし、より良い解決策は次のとおりです。

with open("info.txt", "r") as user_file:
    file = user_file.readlines()
file.sort()
with open("write.txt", "w") as end_file:
    end_file.writelines(file)

あるいは

with open("info.txt", "r") as user_file, open("write.txt", "w") as end_file:
    end_file.writelines(sorted(user_file.readlines()))
于 2013-10-02T19:42:50.830 に答える
0

Python 3.x ではfile.write、ファイルに書き込まれた文字数が返されるため、心配する必要はありません。

私が考えることができる唯一の問題は'\n'、単語の後に何も追加していないため、すべての項目が同じ行に書かれてしまうことです。

with open("write.txt", "w") as f:
    for item in file_string:
        end_file.write(item + '\n')
于 2013-10-02T19:43:08.870 に答える