【问题标题】:Python txt filePython txt 文件
【发布时间】:2021-07-15 19:01:52
【问题描述】:
with open('pg7163.txt', 'r') as f:
    lines = f.readlines()
    
textfra = '*** START OF THE PROJECT GUTENBERG EBOOK'
texttil = '*** END OF THE PROJECT GUTENBERG EBOOK'

for i, line in enumerate(lines):
    if textfra in line:
        break
for j, line in enumerate(lines):
    if texttil in line:
        break
with open("yourfile.txt", "w") as f:
    for line in range(len(lines)):
        if i < line < j:
            f.write(lines)

我正在尝试导入一个 txt 文件,并且只写入介于“textfra”和“texttil”之间的文本

【问题讨论】:

  • 错误信息是什么?
  • TypeError: write() 参数必须是 str,而不是 list
  • 啊,有道理。

标签: python txt write


【解决方案1】:

要修复 TypeError 并编写内容,请将最后一段代码更改为:

with open("yourfile.txt", "w") as f:
    for k, line in enumerate(lines):
        if i < k < j:
            f.write(line)

【讨论】:

  • 这解决了问题还是有其他问题?
  • for line in range(len(lines)): -- 整数行。
  • 很好,让我修正一下答案。
  • 这是修复代码影响最小的正确方法。干得好。
【解决方案2】:

您只需要遍历这些行一次并跟踪当前状态。

textfra = '*** START OF THE PROJECT GUTENBERG EBOOK'
texttil = '*** END OF THE PROJECT GUTENBERG EBOOK'

with open('pg7163.txt', 'r') as f:
    with open('yourfile.txt', 'w') as f_out:
        do_write = False
        for line in f:
            if textfra in line:
                do_write = True
            if texttil in line:
                do_write = False
            if do_write:
                f_out.write(line)

【讨论】:

  • 很好的解决方案,可以最小化 for 循环
【解决方案3】:

我已经看到答案了。但对我的口味来说,它看起来很奇怪。所以,这是另一个更干净的解决方案:

with open('input.txt', 'r', encoding="utf8") as f:
    txt = f.read()

textfra = '*** START OF THE PROJECT GUTENBERG EBOOK'
texttil = '*** END OF THE PROJECT GUTENBERG EBOOK'

start = txt.find(textfra) + len(textfra)
end   = txt.find(texttil)
res   = txt[start:end]

with open('output.txt', 'w', encoding="utf8") as f:
    f.write(res)

根本不需要循环。这只是基本的字符串方法:查找子字符串和对源字符串进行切片。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-14
    • 2011-05-06
    • 2014-04-21
    相关资源
    最近更新 更多