我的代码有问题。 它需要将每个字符更改为之前的字符。 这里的问题是文件:
uif xiffmt po uif cvt hp spvoe boe spvoe
uif xiffmt po uif cvt hp spvoe boe spvoe
它需要返回:
the wheels on the bus goes round and round
the wheels on the bus goes round and round
但是它将它们返回一行:
the wheels on the bus goes round and round the wheels on the bus goes round and round
我该如何解决?
def decode(in_file, out_file):
try:
f = open(in_file, 'r')
for line in f:
lst = list(line)
lst2 = [chr(ord(x) - 1) if x != ' ' else ' ' for x in lst]
a = "".join(lst2)
with open('out_file.txt','a') as f2:
f2.write(a)
except IOError:
print "Cant decipher' {"+in_file+"} 'due to an IO Error."
f.close()
finally:
if f!=None:
f.close()
f2.close()
print decode( 'q4.txt', 'out_file.txt')
答案 0 :(得分:0)
编辑:我刚刚意识到我(和你的;))错误,真正的答案如下
当您更改租船合同时,您也要对那些不可打印的租船-ASCII码<32的租船者进行操作。其中之一是换行符-\n
,代码号10,替换为标签-代码9。
解决方法是简单地跳过使用这样的代码号更改所有内容:
lst2 = [chr(ord(x) - 1) if ord(x)>32 else x for x in lst]
旧答案 ,但无法解决实际问题。
write()
方法不会自动追加换行符-它会写入变量值,并使用它完成操作。
所以您应该自己追加一个:
with open('out_file.txt','a') as f2:
f2.write(a + '\n')
或者将所有修改过的行存储在列表变量中,然后使用writelines()
方法转储其内容-它用换行符分隔每个列表成员。