[英]Read lines from a text file, reverse the sentence and save in a new text file
[英]Read lines from a text file, reverse and save in a new text file
到目前為止,我有這個代碼:
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
我怎樣才能做到這一點?
你可以這樣做:
with open('test.txt') as f, open('output.txt', 'w') as fout:
fout.writelines(reversed(f.readlines()))
read()
以單個字符串返回整個文件。 這就是為什么當你扭轉它時,它也會反轉線條本身,而不僅僅是它們的順序。 你想只反轉行的順序,你需要使用readlines()
來獲取它們的列表(作為第一個近似值,它相當於s = f.read().split('\\n')
):
s = f.readlines()
...
f.writelines(s[::-1])
# or f.writelines(reversed(s))
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()
這里有幾個步驟。 首先,我們希望從第一個文件中獲取所有行,然后我們希望以相反的順序將它們寫入新文件。 執行此操作的代碼如下
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'文件中的所有行。 其次,我們打開輸出文件。 在這里,我們以相反的順序遍歷行,將它們寫入輸出文件。
file.read()
方法返回整個文件的字符串,而不是行。
因為s
是整個文件的字符串,所以你要翻轉字母而不是字母!
首先,您必須將其拆分為線條:
s = f.read()
lines = s.split('\n')
要么:
lines = f.readlines()
而你的方法,它已經是正確的:
f.write(lines[::-1])
希望這可以幫助!
如果您的操作系統使用\\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
一個使用列表的示例,因此它會更容易:我確定答案更優雅,但這種方式很清楚。
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()
你必須逐行工作。
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()
如果您的輸入文件太大而無法放入內存,這是一種有效的方法來反轉它:
執行:
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)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.