通过 class 中的函数反转文本文件的行
Reversing lines of a text file through function in class
我正在尝试制作一个 class,它在构造函数中接收文件名,并具有反转该文件中所有行的功能。
class exampleOne:
def __init__(self, fileName):
self.fileName = fileName
def reverse(self):
file = open(self.fileName, "w")
for value in list:
file.write(value.rstrip() + "\n")
file.close()
a = exampleOne("textExample.txt")
a.reverse()
Text file:
1.
2.
3.
The output i want in the existing file:
3.
2.
1.
但是当我尝试 运行 这个时,我得到了这个错误:
"TypeError: 'type' object is not iterable".. 提前致谢
这条语句:
for value in list:
指的是一个叫做 list
的东西,但是你的程序中没有这个名字的任何东西。如果没有本地定义,list
指的是内置 Python 类型 list
,这不是您可以在 for
循环中使用的东西。
通常最好避免重新定义内置 Python 对象的名称,例如 list
。在您的情况下,您可以使用 lines
来表示文件中的行列表。
(您还必须添加代码以实际 读取 文件中的行。)
我写了这段代码,我认为这对你有用。如果需要,可以将输出写入文件。
class exampleOne:
def __init__(self, fileName):
self.fileName = fileName
def reverse(self):
with open('textExample.txt') as f:
lines = f.readlines()
for i in lines:
words = i.split()
sentence_rev = " ".join(reversed(words))
print sentence_rev
f.close()
a = exampleOne("textExample.txt")
a.reverse()
Example txt file :
Dummy Words
Dummy Words
Output:
Words Dummy
Words Dummy
感谢大家的帮助,代码现在可以运行了。这是完美运行的最终版本
class exampleOne:
def __init__(self, filePath):
self.filePath = filePath
def reverse(self):
file = open(self.filePath, "r")
list = file.readlines()
file.close()
list.reverse()
file = open(self.filePath, "w")
for value in list:
file.write(value)
file.close()
a = exampleOne("textExample.txt")
a.reverse()
您不需要 class;一个函数就可以了。
def reverse_lines_in_file(filepath):
with open(filepath, 'r') as input_file:
lines = input_file.readlines()
lines.reverse()
# If the new first line, which was the old last line,
# doesn't end with a newline, add one.
if not lines[0].endswith('\n'):
lines[0] += '\n'
with open(filepath, 'w') as output_file:
for line in lines:
output_file.write(line)
reverse_lines_in_file('textExample.txt')
有更好的方法来做到这一点,但由于您似乎是一个新手(这没有错 :)),我认为现在就可以了。
虽然您可能认为这里需要 class,但您不需要。除非您获得了更多您没有告诉我们的代码,否则正确的解决方案是根本不使用 class。
你的 class 包含一个字符串并且其中有一个方法,一个简单的函数没有错。与 class:
相比,它实际上是更好的选择
def reverse_lines(file_path):
with open(file_path) as infile:
lines = infile.readlines()
with open(file_path, 'w') as outfile:
outfile.writelines(lines[::-1]) # reversed(lines)
如果您的文件没有以换行符结尾 (\n
),您将需要手动添加换行符。该函数的最终形式可能如下所示:
def reverse_lines(file_path):
"""
Takes a path to a file as a parameter `file_path`
and reverses the order of lines in that file.
"""
# Read all the lines from the file
with open(file_path) as infile:
lines = infile.readlines()
# Make sure there are more lines than one
if len(lines) <= 1:
return
# If the file doesn't end into a newline character
if not lines[-1].endswith('\n'):
# Add it and remove the newline from the first (to be last) line
lines[-1] += '\n'
lines[1] = lines[1][:-1]
# Reverse and output the lines to the file
with open(file_path, 'w') as outfile:
outfile.writelines(lines[::-1])
我正在尝试制作一个 class,它在构造函数中接收文件名,并具有反转该文件中所有行的功能。
class exampleOne:
def __init__(self, fileName):
self.fileName = fileName
def reverse(self):
file = open(self.fileName, "w")
for value in list:
file.write(value.rstrip() + "\n")
file.close()
a = exampleOne("textExample.txt")
a.reverse()
Text file:
1.
2.
3.
The output i want in the existing file:
3.
2.
1.
但是当我尝试 运行 这个时,我得到了这个错误: "TypeError: 'type' object is not iterable".. 提前致谢
这条语句:
for value in list:
指的是一个叫做 list
的东西,但是你的程序中没有这个名字的任何东西。如果没有本地定义,list
指的是内置 Python 类型 list
,这不是您可以在 for
循环中使用的东西。
通常最好避免重新定义内置 Python 对象的名称,例如 list
。在您的情况下,您可以使用 lines
来表示文件中的行列表。
(您还必须添加代码以实际 读取 文件中的行。)
我写了这段代码,我认为这对你有用。如果需要,可以将输出写入文件。
class exampleOne:
def __init__(self, fileName):
self.fileName = fileName
def reverse(self):
with open('textExample.txt') as f:
lines = f.readlines()
for i in lines:
words = i.split()
sentence_rev = " ".join(reversed(words))
print sentence_rev
f.close()
a = exampleOne("textExample.txt")
a.reverse()
Example txt file :
Dummy Words
Dummy Words
Output:
Words Dummy
Words Dummy
感谢大家的帮助,代码现在可以运行了。这是完美运行的最终版本
class exampleOne:
def __init__(self, filePath):
self.filePath = filePath
def reverse(self):
file = open(self.filePath, "r")
list = file.readlines()
file.close()
list.reverse()
file = open(self.filePath, "w")
for value in list:
file.write(value)
file.close()
a = exampleOne("textExample.txt")
a.reverse()
您不需要 class;一个函数就可以了。
def reverse_lines_in_file(filepath):
with open(filepath, 'r') as input_file:
lines = input_file.readlines()
lines.reverse()
# If the new first line, which was the old last line,
# doesn't end with a newline, add one.
if not lines[0].endswith('\n'):
lines[0] += '\n'
with open(filepath, 'w') as output_file:
for line in lines:
output_file.write(line)
reverse_lines_in_file('textExample.txt')
有更好的方法来做到这一点,但由于您似乎是一个新手(这没有错 :)),我认为现在就可以了。
虽然您可能认为这里需要 class,但您不需要。除非您获得了更多您没有告诉我们的代码,否则正确的解决方案是根本不使用 class。 你的 class 包含一个字符串并且其中有一个方法,一个简单的函数没有错。与 class:
相比,它实际上是更好的选择def reverse_lines(file_path):
with open(file_path) as infile:
lines = infile.readlines()
with open(file_path, 'w') as outfile:
outfile.writelines(lines[::-1]) # reversed(lines)
如果您的文件没有以换行符结尾 (\n
),您将需要手动添加换行符。该函数的最终形式可能如下所示:
def reverse_lines(file_path):
"""
Takes a path to a file as a parameter `file_path`
and reverses the order of lines in that file.
"""
# Read all the lines from the file
with open(file_path) as infile:
lines = infile.readlines()
# Make sure there are more lines than one
if len(lines) <= 1:
return
# If the file doesn't end into a newline character
if not lines[-1].endswith('\n'):
# Add it and remove the newline from the first (to be last) line
lines[-1] += '\n'
lines[1] = lines[1][:-1]
# Reverse and output the lines to the file
with open(file_path, 'w') as outfile:
outfile.writelines(lines[::-1])