到目前为止,我有这段代码:
f = open("text.txt", "rb")
s = f.read()
f.close()
f = open("newtext.txt", "wb")
f.write(s[::-1])
f.close()
原始文件中的文字是:
This is Line 1
This is Line 2
This is Line 3
This is Line 4
当它反转并保存时,新文件如下所示:
4 eniL si sihT 3 eniL si sihT 2 eniL si sihT 1 eniL si sihT
当我希望它看起来像这样:
This is line 4
This is line 3
This is line 2
This is line 1
我该怎么做?
答案 0 :(得分:10)
您可以执行以下操作:
with open('test.txt') as f, open('output.txt', 'w') as fout:
fout.writelines(reversed(f.readlines()))
答案 1 :(得分:4)
read()
以单个字符串返回整个文件。这就是为什么当你扭转它时,它也会反转线条本身,而不仅仅是它们的顺序。您只想反转行的顺序,您需要使用readlines()
来获取它们的列表(作为第一个近似值,它相当于s = f.read().split('\n')
):
s = f.readlines()
...
f.writelines(s[::-1])
# or f.writelines(reversed(s))
答案 2 :(得分:1)
f = open("text.txt", "rb")
s = f.readlines()
f.close()
f = open("newtext.txt", "wb")
s.reverse()
for item in s:
print>>f, item
f.close()
答案 3 :(得分:1)
这里有几个步骤。首先,我们希望从第一个文件中获取所有行,然后我们希望以相反的顺序将它们写入新文件。执行此操作的代码如下
lines = []
with open('text.txt') as f:
lines = f.readlines()
with open('newtext.txt', 'w') as f:
for line in reversed(lines):
f.write(line)
首先,我们初始化一个变量来保存我们的行。然后我们阅读了' test.txt'中的所有行。文件。 其次,我们打开输出文件。在这里,我们以相反的顺序遍历这些行,将它们写入输出文件。
答案 4 :(得分:0)
方法file.read()
返回整个文件的字符串,而不是行。
由于s
是整个文件的字符串,因此你正在翻转字母,而不是行!
首先,你必须将它分成几行:
s = f.read()
lines = s.split('\n')
或者:
lines = f.readlines()
你的方法,它已经是正确的了:
f.write(lines[::-1])
希望这有帮助!
答案 5 :(得分:0)
如果您的操作系统使用\n
来破解行
f = open("text.txt", "rb")
s = f.read()
f.close()
f = open("newtext.txt", "wb")
f.write(reversed(s.split("\n")).join("\n"))
f.close()
这里的主要内容是reversed(s.split("\n")).join("\n")
。
它执行以下操作:
\n
,array
\n
合并为string
这里的州:
line1 \n line2 \n line3
["line1", "line2", "line3"]
["line3", "line2", "line1"]
line3 \n line2 \n line1 \n
答案 6 :(得分:0)
使用列表的示例因此更容易: 我确信答案更优雅,但这种方式很清楚。
f = open(r"c:\test.txt", "rb")
s = f.read()
f.close()
rowList = []
for value in s:
rowList.append(value + "\n")
rowList.reverse()
f = open(r"c:\test.txt", "wb")
for value in rowList:
f.write(value)
f.close()
答案 7 :(得分:0)
你必须逐行工作。
f = open("text.txt", "rb")
s = f.read()
f.close()
f = open("newtext.txt", "wb")
lines = s.split('\n')
f.write('\n'.join(lines[::-1]))
f.close()
答案 8 :(得分:0)
如果您的输入文件太大而无法容纳在内存中,这是一种有效的方法来将其反转:
实施:
import os
from itertools import islice
input_path = "mylog.txt"
output_path = input_path + ".rev"
with open(input_path) as fi:
for i, sli in enumerate(iter(lambda: list(islice(fi, 100000)), []), 1):
with open(f"{output_path}.{i:05}", "w") as fo:
fo.writelines(sli)
with open(output_path, "w") as fo:
for file_index in range(i, 0, -1):
path = f"{output_path}.{file_index:05}"
with open(path) as fi:
lines = fi.readlines()
os.remove(path)
for line in reversed(lines):
fo.write(line)