【问题标题】:IndexError: string index out of range - I cannot find answer anywhere but seems so easyIndexError:字符串索引超出范围 - 我无法在任何地方找到答案,但似乎很容易
【发布时间】:2014-06-05 23:14:23
【问题描述】:

我正在使用 python 3.4

我有一个 .txt 文件,每一行都以一个 id 号开头,然后是字母和数字,例如...

012394  The big Project 1997 June Terry Smith
013894  Toms Project   1994 March Michaal Bach

等等...我需要将所有以 01 开头的行复制到另一个文件中

当我使用以下内容时,它不断给我上述错误:

with open("old.txt","r") as mf, open("new.txt","w") as nf:

    def dafunction():
        mf = open ("old.txt", "r")
        nf = open("new.txt","w")
        for line in mf:
            bat = str(line)
            if bat.startswith(01):
                nf.write(line)



dafunction()
mf.close()
nf.close()

我尝试使用 bat.startswith("01) 并跳过设置 bat 变量并直接进入 line.startswith(01) 等,但我一直收到错误。

有谁知道我做错了什么?或其他实现目标的方法?

非常感谢任何帮助!

【问题讨论】:

  • 你的代码没有意义。为什么在文件打开时定义一个函数,然后关闭文件并调用该函数,该函数本身会打开(并且无法关闭)文件?请提供完整的错误回溯。

标签: python function python-3.x


【解决方案1】:

你有很多不必要的代码。试试:

with open("old.txt") as mf, open("new.txt", "w") as nf:
    for line in mf:
        if line.startswith('01'):
            nf.write(line)

【讨论】:

  • 我尝试过使用上述格式,但似乎发生的事情总是返回 false。我尝试过使用 'if line[1] == "1"' 和各种比较,但无论如何,如果我将它与 'line' 或 'str(line)' 进行比较,它会返回 false?有什么见解吗?实际上 'line[x]' 总是返回错误“超出范围”
  • 什么意思“返回false”?在检查'01' 之前,您可以尝试line.strip().startswith('01') 删除行首和行尾的所有空格。
  • 再次感谢您的帮助,“返回 false”我的意思是 if 语句不会评估为 True 并执行 nf.write(line),但是如果我放置 else 语句说else: nf.write("fml") 它会为每一行写“fml”。我尝试添加strip(),同样的问题,它只是永远找不到startswith('01')等于或True,在打开的“old.txt”的“行”上,无论我如何构造参数?
  • @user3713209 "012394 The big Project 1997 June Terry Smith".startswith('01') 在 IDLE 中给了我True,正如我所料。您需要更详细地查看您的文本文件 - 尝试添加 print(line) 以确保您得到您所期望的。
【解决方案2】:
if bat.startswith(01): is not correct python syntax, you cannot use an `int`

你应该在函数中打开你的文件。

def dafunction():
    with open("old.txt","r") as mf:
        with open("new.txt","w") as nf:
            for line in mf:
                if line.startswith("01"): 
                    nf.write(line)

【讨论】:

    【解决方案3】:

    好的,谢谢你的帮助,你真的帮我清理了我的代码,但似乎问题是文本文件是从 excel 保存为 unicode txt 文件,显然 IDLE 或 python 或其他任何不起作用与 unicode 很好,如果没有其他转换代码或我猜的东西,它不会准确比较。

    我将文件保存为 txt 制表符分隔,然后运行代码,效果很好!再次感谢你们的帮助,我希望其他人在未来的某个时候能从中得到一些帮助!

    tl:dr - 文件以 unicode 格式保存,这导致了问题。

    【讨论】:

      猜你喜欢
      • 2021-01-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多