Python-尝试拆分文本行时出错

Python-尝试拆分文本行时出错,python,string,list,split,Python,String,List,Split,我在尝试拆分从.txt文件中获取的一行文本时遇到as问题。这是一个相当大的文件,但我将只粘贴两行原始文本 1307;Własność:udział1/1GMINA TARNOWIEC 21130-200 ZipCode;KS1J/00080000/2;861;Własność:udział1/1GMINA TARNOWIEC 21130-200 ZipCode;KS1J/00080990/2 1306;瓦斯诺奇:乌兹亚1/1扬·诺瓦基姆。rodz.:Tomasz_uuMariasome,其中23

我在尝试拆分从.txt文件中获取的一行文本时遇到as问题。这是一个相当大的文件,但我将只粘贴两行原始文本

1307;Własność:udział1/1GMINA TARNOWIEC 21130-200 ZipCode;KS1J/00080000/2;861;Własność:udział1/1GMINA TARNOWIEC 21130-200 ZipCode;KS1J/00080990/2

1306;瓦斯诺奇:乌兹亚1/1扬·诺瓦基姆。rodz.:Tomasz_uuMariasome,其中230-200 ZipCode;科威特22222;861;Własność:udział1/1GMINA Tarnowiectarnowec 21130-200 ZipCode;KS1W/00080000/1

我从该文件获得的数据将用于创建报告,
\uu
将用于进一步格式化。我想在
上拆分行

问题是,我在两种拆分方法上出现了错误

首先,基本的
.split(“;”)

打印第一个循环后,我遇到一个错误

Traceback (most recent call last):
File "C:\Users\Admin\Desktop\Nowy folder\costam.py", line 36, in <module>
a,b,c,d,e,f,g = line.split(';')
ValueError: not enough values to unpack (expected 7, got 1)
正确打印第一行后,我也会遇到错误:

Traceback (most recent call last):
  File "C:\Users\Admin\Desktop\Nowy folder\costam.py", line 22, in <module>
    b = line[1]
IndexError: list index out of range
回溯(最近一次呼叫最后一次):
文件“C:\Users\Admin\Desktop\Nowy folder\costam.py”,第22行,在
b=第[1]行
索引器:列表索引超出范围

知道我为什么会出现这样的错误吗?

您的第二个策略不起作用,因为第[0]行实际上是整行,因为它不包含空格,默认值是在空格处拆分。 因此,没有第[1]行或第[2]行。。。因此,您会得到一个列表索引超出范围的错误


我希望这有帮助。我希望它能解决您的问题。

您的第二个策略不起作用,因为第[0]行实际上是整行,因为它不包含空格,默认值是在空格处拆分。 因此,没有第[1]行或第[2]行。。。因此,您会得到一个列表索引超出范围的错误

我希望这有帮助。我希望它能解决您的问题。

有时
行分割(“;”)
不给
(a,b,c,…)
提供7个值进行解包,所以最好像这样迭代

lst = line.split(';')
for item in lst:
    print item
在这两者之间有一条新线,它给你带来了麻烦, 接下来的语法是一种糟糕的做法

您可以这样更改代码

for line in open("'dane_protokoly.txt'").read().split('\n'):
    lst = line.split(';')
    for item in lst:
        print item
它不关心中间的新行

有时
line.split(“;”)
没有为
(a,b,c,…)
提供7个要解包的值,所以最好像这样迭代

lst = line.split(';')
for item in lst:
    print item
在这两者之间有一条新线,它给你带来了麻烦, 接下来的语法是一种糟糕的做法

您可以这样更改代码

for line in open("'dane_protokoly.txt'").read().split('\n'):
    lst = line.split(';')
    for item in lst:
        print item
它不关心中间的新行


正如Rahul K p所提到的,问题在于数据行之间的“空”行。在尝试分割数据时,应跳过它们

也许可以以此为出发点:

with open(r"dane_protokoly.txt", "r") as data_file:
    for line in data_file:
        #skip rows which only contain a newline special char
        if len(line)>1:
            data_row=line.strip().split(";")
            print(data_row)

正如Rahul K p所提到的,问题在于数据行之间的“空”行。在尝试分割数据时,应跳过它们

也许可以以此为出发点:

with open(r"dane_protokoly.txt", "r") as data_file:
    for line in data_file:
        #skip rows which only contain a newline special char
        if len(line)>1:
            data_row=line.strip().split(";")
            print(data_row)

因为您错误地猜测了
拆分
返回的项目数,所以您得到的第一个项目。猜测是一种坏习惯。只需将结果存储在
列表中
。在拆分前,请尝试打印(行)
,以便自己查看。第一行打印正确,下一行出现错误。您得到的第一行错误是因为您错误地猜测了拆分后的
返回的项数。猜测是一种坏习惯。只需将结果存储在
列表中
。请在拆分前尝试打印(行)
。第一行打印正确,下一行有错误第一行打印正确,第二行返回错误第一行打印正确,第二行返回错误它正常,但我需要下一个名为“a,b,c,d,e,f,g”的项目。我确信每一行都有7个值需要解包,这就是为什么我使用这种类型的拆分。而且,第一行是正确打印的,无论我的method@krizz中间有一条新线,它为你制造了问题,在第二次迭代中,它只给出了一条新线。好的,你的回答有点引导我找到了解决方案。文件中有一些“隐藏的”(?)符号,我需要先清除它,它才能正常工作。@krizz根据您的需要更新了我的答案,没问题,但我需要下一个名为“a、b、c、d、e、f、g”的项目。我确信每一行都有7个值需要解包,这就是为什么我使用这种类型的拆分。而且,第一行是正确打印的,无论我的method@krizz中间有一条新线,它为你制造了问题,在第二次迭代中,它只给出了一条新线。好的,你的回答有点引导我找到了解决方案。文件中有一些“隐藏的”(?)符号,我需要先将其清除,它才能正常工作。@krizz根据您的需要更新了我的答案,