读取一个文件并写入新文件会使新文件为空

时间:2017-05-19 16:43:57

标签: python file

我正在尝试从包含字符的文件中读取" |"我需要在将数据复制到新文件时删除。例如,我的数据看起来像是,一行的内容转移到另一行:

| bob |  Timestamp: 1493651705861 |  sally |

我想要" |"删除,每次出现后,下一组文本将移动到下一行,所以之后它将如下所示:

bob
Timestamp: 1493651705861
sally

我构造了以下代码来逐行读取旧文件,然后逐个字符地读取,然后检查字符是否为" |"如果是不写的话。但是,当我这样做时,我的print语句不打印任何内容,新文件为空。这是我正在使用的代码:

with open('example-file','r') as f, open('example-file-New','w') as fnew:
    line = f.readline()
    for line in f:
        for ch in line:
            print("character is: ")
            print(ch)
            if ch =="|":
                 print("Not printing character")
                 fnew.write('\n')
            else:
                fnew.write(ch)
    print('end of program')
    fnew.close()

任何帮助都会非常感激,因为我仍然习惯于习惯Python。

1 个答案:

答案 0 :(得分:0)

您的代码适合我,但是当我在您的示例输入上运行它时,我没有得到您的确切示例输出。基于输出,我假设您还想删除文本的空白填充。有几种方法可以实现这一点,但我喜欢在正则表达式sub library中使用替换re方法。

import re
with open('example-file','r') as f, open('example-file-New','w') as fnew:
    for line in f:
        line = re.sub("^\|\s+", "", line)
        line = re.sub("\s+\|$", "", line)
        line = re.sub("\s+\|\s+", "\n", line)
        fnew.write(line)

"^\|\s+" - 将第一个栏与相邻的空格匹配

"\s+\|$" - 将最后一个条与相邻的空格匹配

"\s+\|\s+" - 将其他栏与相邻的空格匹配

你可以用更少的表达来实现这一点,但为了清晰起见我将它们分开了。我建议花几个小时熟悉正则表达式(正则表达式),因为它会使你的文本操作任务更多更容易。