【问题标题】:Reading one file and writing to a new file leaves new file empty读取一个文件并写入一个新文件使新文件为空
【发布时间】:2017-05-19 16:43:56
【问题描述】:

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

| bob |  Timestamp: 1493651705861 |  sally |

我想要“|”删除后,每次出现后,下一组文本将移至下一行,因此之后会如下所示:

bob
Timestamp: 1493651705861
sally

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

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。

【问题讨论】:

  • 您的代码对我有用。你的代码还有什么作用?您的输入文件中有多少行?在 Python 中仅供参考,字符串有一个 replace 方法,您可以使用该方法将一个字符替换为另一个字符。例如line.replace('|', '\n').
  • 基本上 也适用于我,因为新文件最终不会为空。顺便说一句,当您使用 with 语句打开文件时,您不需要显式关闭文件。您是否有意跳过文件的第一行?你真的希望每个字符都像这样打印在单独的行上吗?你真的想要“|”之间的所有空格吗字符复制到输出?复制空格意味着输出文件中的文本将在原始行中的每个项目的前后都有它们。

标签: python file


【解决方案1】:

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

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+" - 将其他条与相邻的空格匹配

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

【讨论】:

    猜你喜欢
    • 2021-01-23
    • 1970-01-01
    • 2020-04-26
    • 2023-04-05
    • 1970-01-01
    • 2020-10-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多