我试图反转句子并将其写入另一个文件但是当我运行它时,它会创建一个空的reversed.txt
文件。
以下两行是文件输入:
Hello World
每个人都在做什么?
文件输出将包含以下行:
dlroW olleH
?gniod enoyreve si woH
我的代码:
#!/usr/local/bin/python
name = raw_input("Enter name of file: ")
def Reverse(name):
try:
input_file=open(name,"r")
reversed = "reversed.txt"
output_file=open(reversed,"w")
list=input_file.readlines()
for i in range(0,len(list)):
d = int(len(list) - i)
output_file.write(list[d])
except IOError:
print("Cannot open file")
except:
print("Other errors")
else:
print("success")
finally:
print("prints always")
input_file.close()
output_file.close()
#returns reversed
Reverse(name)
当我运行它时,它会打印"其他错误"。它创建新文件reversed.txt
但它是空的。
答案 0 :(得分:2)
您的代码段存在一些问题。但这应该会更好:
#!/usr/local/bin/python
name = raw_input("Enter name of file: ")
def Reverse(name):
try:
input_file=open(name,"r")
reversed = "reversed.txt"
output_file=open(reversed,"w")
for line in input_file.readlines():
output_file.write(line[-2::-1] + "\n")
except IOError:
print("Cannot open file")
except:
print("Other errors")
else:
print("success")
finally:
print("prints always")
input_file.close()
output_file.close()
#returns reversed
Reverse(name)
这里我们迭代读取行,然后使用字符串可以被视为数组来反转每一行的事实。
修改强>
通过使用line[-2::-1]
,我们避免在我们写入文件的行的开头有结尾的新行。然后我们附加"\n"
,以便每一行都被新行字符正确分隔。
答案 1 :(得分:0)
您可以尝试这样的事情:
lines=input_file.readlines()
for line in lines:
line = ''.join(list(reversed(line)))
output_file.write(line)
答案 2 :(得分:0)
如果我告诉你什么是错的,没有改进你的实施(这绝对可能;))我想建议一些事情:
def
之后的代码中,您有一个空行。这意味着您的功能在开始之前结束,而您的try
except
只是“浮动”。 您的excepts
不是很有帮助:您只需在捕获异常时打印小信息。您不知道为什么抛出异常。更好的方法是使用您自己的自定义消息打印异常。类似的东西:
try:
someCode()
except IOError as ioE:
print "Can't open file! - ", ioE # Change to print() for py3.x
except Exception as otherE:
print "Unknown error! - ", otherE
初始化您打算使用的变量:如果您使用的是变量,请定义它!确保任何循环/尝试例外流程最终都会初始化您的可变品。如有疑问,请初始化为None
(并在使用时检查None
)。在您的代码中,input_file
中使用了finally
。但是,如果input_file=open(name,"r")
引发异常,则input_file
将保持未初始化,导致finally
中出现另一个例外。
除此之外,您的实施可以从其他答案中得到改进。 希望这有帮助!