如何使用python正确读取和修改文件

时间:2012-10-31 02:42:40

标签: python string text file-io

我正在尝试从文件中删除所有(非空格)空白字符,并用逗号替换所有空格。这是我目前的代码:

def file_get_contents(filename):
  with open(filename) as f:
    return f.read()

content = file_get_contents('file.txt')
content = content.split
content = str(content).replace(' ',',')
with open ('file.txt', 'w') as f:
  f.write(content)

运行此命令时,它会用以下内容替换文件的内容:

<built-in,method,split,of,str,object,at,0x100894200>

3 个答案:

答案 0 :(得分:3)

您遇到的主要问题是您将方法content.split分配给内容,而不是调用它并分配其返回值。如果您在分配后打印出content,那么它将是:<built-in method split of str object at 0x100894200>,这不是您想要的。通过添加括号来修复它,使其成为方法的调用,而不仅仅是对它的引用:

content = content.split()

我认为在解决之后你可能仍会遇到问题。 str.split返回一个列表,然后使用str调整回一个字符串(在尝试用逗号替换空格之前)。这将给你方括号和引号,你可能不想要,你会得到一堆额外的逗号。相反,我建议使用str.join方法,如下所示:

content = ",".join(content) # joins all members of the list with commas

我不确定这是否是你想要的。使用split将替换文件中的所有换行符,因此您最终会得到一行,其中有许多单词用逗号分隔。

答案 1 :(得分:0)

分割内容时,您忘记调用该功能。一旦你拆分,它就是一个数组,所以你应该循环来替换东西。

def file_get_contents(filename):
  with open(filename) as f:
    return f.read()

content = file_get_contents('file.txt')
content = content.split() <- HERE
content = [c.replace(' ',',') for c in content]
content = "".join(content)
with open ('file.txt', 'w') as f:
  f.write(content)

答案 2 :(得分:0)

如果你想替换字符,我认为你最好使用python的re模块进行正则表达式。示例代码如下:

import re

def file_get_contents(filename):
  with open(filename) as f:
    return f.read()

if __name__=='__main__':
    content = file_get_contents('file.txt')
    # First replace any spaces with commas, then remove any other whitespace
    new_content = re.sub('\s', '', re.sub(' ', ',', content))
    with open ('new_file.txt', 'w') as f:
      f.write(new_content)

它更简洁,然后尝试分裂所有的时间,并给你一点灵活性。还要注意你打开和阅读代码的文件有多大 - 你可能要考虑使用行迭代器或其他东西而不是一次读取所有文件内容