我在试图分割从.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
我知道为什么会出现这样的错误?
答案 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] ...因此您会得到列表索引超出范围错误。
我希望这会有所帮助。我希望它能解决你的问题。