【问题标题】:Find a dot in a text file and add a newline to the file in Python?在文本文件中查找一个点并在 Python 中向文件添加换行符?
【发布时间】:2018-04-24 19:23:37
【问题描述】:

我从一个文件中读取,如果它找到".",它应该在文本中添加一个换行符"\n" 并将其写回文件。我试过这段代码,但仍然有问题。

inp = open('rawCorpus.txt', 'r')
out = open("testFile.text", "w")

for line in iter(inp):
    l = line.split()
    if l.endswith(".")
       out.write("\n")
    s = '\n'.join(l)
print(s)
out.write(str(s))
inp.close()
out.close()

【问题讨论】:

  • 问题是什么?
  • 我正在读取一个文件,如果它找到一个“。”或句尾,应添加换行符,然后继续拆分。
  • 你的文本文件很大吗?还是不行?
  • 举个输入输出文件的例子。
  • @TheAfghan:您的输入文本文件只有一行?像 bla.hi.hello.ss.dd 还是多行?

标签: python python-2.7 python-3.x python-requests wxpython


【解决方案1】:

您正在用s = '\n'.join(l) 覆盖每个循环中的字符串s

在 for 循环之前将 s = '' 分配为空字符串,并在每个循环期间添加新行,例如与s += '\n'.join(l)s = s + '\n'.join(l) 的简短版本

这应该可行:

inp = open('rawCorpus.txt', 'r')
out = open('testFile.text', 'w')

s = ''  # empty string

for line in iter(inp):
    l = line.split('.')
    s += '\n'.join(l)  # add new lines to s

print(s)
out.write(str(s))

inp.close()
out.close()

【讨论】:

  • 谢谢,我不知道这一点,但我的问题是,如果在阅读过程中“。”很好,它应该添加一个换行符。
  • 这会将. 替换为\n,因为该行在. 处被分割,并且部分再次与\n 连接。
  • 抱歉,您的解决方案正在覆盖文件。我测试过
  • 是的,out 文件已被覆盖。
  • 它不应将 . 替换为 \n。但是当找到 .它应该添加一个换行符
【解决方案2】:

试试这个(正常方式):

with open("rawCorpus.txt", 'r') as read_file:
    raw_data = read_file.readlines()


my_save_data = open("testFile.text", "a")

for lines in raw_data:

    if "." in lines:

        re_lines = lines.replace(".", ".\r\n")
        my_save_data.write(re_lines)

    else:
        my_save_data.write(lines + "\n")

my_save_data.close()

如果你的文本文件不大,你也可以试试这个:

with open("rawCorpus.txt", 'r') as read_file:
    raw_data = read_file.read()

re_data = raw_data.replace(".", ".\n")

with open("testFile.text", "w") as save_data:
    save_data.write(re_data)

UPDATE(输出新行也取决于您的文本查看器!因为在某些文本编辑器中,“\n”是新行,但在其他一些编辑器中,“\r\n”是新行。 ) :

输入样本:

这是一本书。我喜欢它。

这是一个苹果。我喜欢它。

这是一台笔记本电脑。我喜欢它。

这是一支笔。我喜欢它。

这是一部手机。我喜欢它。

代码:

last_buffer = []
read_lines = [line.rstrip('\n') for line in open('input.txt')]

my_save_data = open("output.txt", "a")


for lines in read_lines:

    re_make_lines = lines.split(".")

    for items in re_make_lines:

        if items.replace(" ", "") == "":
            pass

        else:

            result = items.strip() + ".\r\n"
            my_save_data.write(result)

my_save_data.close()

输出将是:

这是一本书。

我喜欢它。

这是一个苹果。

我喜欢它。

这是一台笔记本电脑。

我喜欢它。

这是一支笔。

我喜欢它。

这是一部手机。

我喜欢它。

【讨论】:

  • 感谢您的解决方案,但现在它不会逐行拆分单词。我的帖子是逐行拆分单词,即使在您的解决方案中我添加了 split("\n")。
  • @TheAfghan:所以...请在您的问题中写下您的 IO 示例,我会检查它。
  • 我想从句子中逐行读取单词,当句子以“.”结尾时,它应该在“.”之后添加一个换行符
【解决方案3】:

这是我自己的解决方案,但我仍然希望在“。”之后再添加一个换行符,这个解决方案没有这样做 read_lines = [line.rstrip('\n') for line in open('rawCorpus.txt')] 单词 = []

my_save_data = open("my_saved_data.txt", "w")

   for lines in read_lines:

   words.append(lines)


for word in words:
   w = word.rstrip().replace('.', '\n.')
   w = w.split()
   my_save_data.write(str("\n".join(w)))
   print("\n".join(w))

my_save_data.close()

【讨论】:

  • "但我仍然想要在 "." " 之后再添加一个换行符......所以......你可以使用两个 "\n" 字符......比如 "\n\n" 你试过了吗那个?
猜你喜欢
  • 2017-02-28
  • 1970-01-01
  • 2020-05-26
  • 2013-07-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-12-07
  • 2014-05-02
相关资源
最近更新 更多