在Python中从文件读取和写入新行

时间:2010-10-15 18:29:07

标签: python file-io newline

我正在尝试从文件中读取并写入另一个文件。当我试图将原始文件中的换行符保留到新文件时,会出现问题。

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()

4 个答案:

答案 0 :(得分: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))

答案 1 :(得分:1)

您可以以二进制模式打开文件以保留EOL:

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

答案 2 :(得分:0)

当您按行读取文件时,您会隐式地按行分割文件,这会丢弃换行符。如果您想要换行,您只需手动附加换行符:

enctextCC.write(curr + "\n")

您的另一种选择是使用保留尾随换行符的readline函数读取第一个文件的行。

答案 3 :(得分:0)

我不确定你是如何得到你的意见的......这很好用:

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