2010-10-15 501 views
2

我试图从一个文件中读取数据并写入另一个文件。当我试图将新文件从原始文件保存到新文件时出现问题。在Python中从一个文件读到另一个文件并写入另一个文件

def caesar_encrypt(orig , shift): 
    enctextCC = open("CCencoded.txt" , 'w') 
    for i in range(len(orig)): 
    for j in range(len(orig[i])): 
     curr = orig[i][j] 
     if ord(curr) == 10: 
      enctextCC.write("\n") //doesn't work :(
     elif ord(curr) < 97: 
      enctextCC.write(curr) 

     elif ord(curr)+shift > 122: 
      enctextCC.write(chr(ord(curr)+shift-26)) 

     elif ord(curr)+shift >= 97 & ord(curr)+ shift <= 122 : 
      enctextCC.write(chr(ord(curr)+shift)) 

enctextCC.close() 

任何关于发生了什么问题的建议?

由于

编辑:的解决方案是添加新行中在外部for循环的结束。由于我正在阅读列表列表,因此内部循环基本上是一行代码。所以它应该看起来像这样:

def caesar_encrypt(orig , shift): 
    enctextCC = open("CCencoded.txt" , 'w') 
    for i in range(len(orig)): 
    for j in range(len(orig[i])): 
     curr = orig[i][j] 
     if ord(curr) < 97: 
      enctextCC.write(curr) 

     elif ord(curr)+shift > 122: 
      enctextCC.write(chr(ord(curr)+shift-26)) 

     elif ord(curr)+shift >= 97 & ord(curr)+ shift <= 122 : 
      enctextCC.write(chr(ord(curr)+shift)) 
    enctextCC.write("\n") 

enctextCC.close() 
+2

*什么*不工作?如何如此,你究竟想要做什么? – poke 2010-10-15 18:31:26

+0

看起来你只是写新行文件到新文件... – 2010-10-15 18:34:20

+0

我有几个工作的情况下,它只是当我试图保留新行字符时,它打破了。 – pythonTA 2010-10-15 18:54:12

回答

2

你做错了

out_file = open("output.txt", "w") 
for line in open("input.txt", "r"): 
    out_file.write(line) 
    out_file.write("\n") 

请注意,我们不检查换行符的结局,因为我们获取的项目在一次一行,所以我们相信,经过我们读取一行跟随换行

但是,您为什么需要这样做,而不是正常的副本?

编辑:如果你需要的是复制一个文件,使用这样的:

from shutil import copy 
copy("input.txt", "output.txt") 

如果你需要读取整个文件,使用read()功能,像这样:

file_data = open("input.txt", "r").read() 
# manipulate the data ... 
output = open("output.txt", "w") 
output.write(file_data) 
output.close() 

编辑2:因此,如果您要将其他ASCII值映射到每个字符,则您做得很对,除了:

  • 你忘了写其他字符,你只会输出\n字符
  • 请务必切实阅读换行符,因为readlines()并通过文件迭代不返回换行。

你的代码看起来更象这样:

for j in range(len(orig[i])): 
     curr = orig[i][j] 
     if ord(curr) == 10: 
      enctextCC.write(curr) 
     else: 
      enctextCC.write(transformed(curr)) 
+0

这是我除了不是转换()我有其他如果情况。尽管对于newline的enctextCC.write(curr)仍然不起作用。 – pythonTA 2010-10-15 19:19:58

+0

那么也许你没有阅读换行符 - 通过在orig中添加'print'\ n'来检查。 – 2010-10-15 19:23:27

0

当您通过行读取文件时,您隐式地将文件按行分割,这会丢弃换行符。如果你想换行,你应该简单地手动添加一个新行:

enctextCC.write(curr + "\n") 

您的其他替代方法是从使用readline功能至极的第一个文件中的行读取保留尾随换行符。

+0

嗯,什么都没发生。我不能使用readline函数,因为我需要操纵每行中的每个字符。 – pythonTA 2010-10-15 18:52:14

0

我不知道你是如何让您的输入...这工作得很好:

input = open('filename', 'r') 
lines = input.readlines() 
output = open('outfile', 'w') 
output.writelines(lines) 
+0

我正在制作一系列密码,这些密码要求我获取单个字符,然后将它们映射到其他ascii值,然后将新映射的字符写入新文件。 – pythonTA 2010-10-15 18:48:46

+0

应该仍然正常工作;只是在'lines'上操作。它包括换行符。 – nmichaels 2010-10-15 18:54:02

1

可以以二进制方式打开文件保存EOL:

with open(filenameIn, 'rb') as inFile: 
with open(filenameOut, 'wb') as outFile: 
    for line in inFile: 
    outFile.write(line) 
+0

我会投票支持这个答案,除了对.upper()的莫名其妙的调用。那是为什么?我在这个问题中没有看到它的要求。 – 2010-10-15 18:52:47

+0

我删除了:) – Sacha 2010-10-15 18:55:22

相关问题