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

时间:2017-02-20 10:15:26

标签: python string list split

我在试图分割从.txt文件中获取的一行文本时遇到了问题。这是一个非常大的文件,但我只会粘贴2行,原始文本

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

     1306;Własność:udział1/ 1<> Jan Nowak<> im。 rodz。:Tomasz_ Maria<> Somewhere 2<> 30-200 ZipCode; KW22222; 861;Własność:udział1/ 1> GMINA TARNOWIEC<> Tarnowiec 211< 30-200 ZipCode; KS1W / 00080000/1;

我从此文件获取的数据将用于创建报告,_<>将用于进一步格式化。我希望将这一行拆分为;

问题是,我在两种拆分方法上遇到错误。

首先,基本.split(';')

dane = open('dane_protokoly.txt', 'r')
for line in dane:
    a,b,c,d,e,f,g = line.split(';')
    print(a)
    print(b)
    print(c)
    print(d)
    print(e)
    print(f)
    print(g)

打印第一个循环后出现错误

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)

与从该文件创建列表相同(列表如下:['1307','Własność:udział1/ 1&lt;&gt; GMINA TARNOWIEC&lt;&gt;&lt;&gt;&lt;&gt;&gt;&gt; 30-200 ZipCode',' KS1J / 00080000/2','861','Własność:udział1/ 1&lt;&gt; GMINA TARNOWIEC&lt;&gt;&lt;&gt;&lt;&gt;&gt;&gt; 30-200 ZipCode','KS1J / 00080990/2','' ]

dane = plik('dane_protokoly.txt')
for line in dane:
    a = line[0]
    b = line[1]
    c = line[2]
    d = line[3]
    e = line[4]
    f = line[5]
    g = line[6]
    print(str(a))
    print(str(b))
    print(str(c))
    print(str(d))
    print(str(e))
    print(str(f))

错误我在正确打印第一行后也得到了:

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

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

3 个答案:

答案 0 :(得分:3)

有时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
  

它并不关心中间的换行符,

答案 1 :(得分:1)

正如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)

答案 2 :(得分:0)

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

我希望这会有所帮助。我希望它能解决你的问题。