IndexError:字符串索引超出范围 - 我无法在任何地方找到答案但看起来很容易

时间:2014-06-05 23:14:24

标签: python function python-3.x

我正在使用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)等等,我一直收到错误。

有谁知道我做错了什么?或另一种实现目标的方式?

非常感谢任何帮助!

3 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分:0)

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)

答案 2 :(得分:0)

好的,谢谢你的帮助,你真的帮我清理了我的代码,但似乎问题是文本文件是从excel保存为unicode txt文件,显然是IDLE或python或者其他什么东西没有。与unicode配合得很好,如果没有其他转换代码或其他东西,它就无法准确比较。

我将文件保存为仅限txt制表符分隔,然后运行代码并且效果很好!再次感谢yall的帮助,我希望将来某个时候有人可以使用它!

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