读取文件时字符串索引超出范围

时间:2019-03-13 11:10:48

标签: python python-3.x csv web-scraping

我想读取以下格式的csv

BX80684I58400;https://www.websupplies.gr/epeksergastis-intel-core-i5-8400-9mb-2-80ghz-bx80684i58400
bx80677g3930;https://www.websupplies.gr/epeksergastis-intel-celeron-g3930-2mb-2-90ghz-bx80677g3930

我使用以下内容

contents = []
with open('websupplies2.csv','r') as csvf: # Open file in read mode
urls = csvf.read()
split_urls=urls.split('\n')

for split_url in split_urls:

    contents.append(split_url[1])

但我明白了

字符串索引超出范围

我注意到我不能传递定界符=';'在csvf.read()内部。 如果我将其更改为

csv.reader(csvf, delimiter=';') 

我知道不支持拆分。

谢谢您的时间

3 个答案:

答案 0 :(得分:3)

使用csv模块。

例如:

import csv

with open(filename) as infile:
    reader = csv.reader(infile, delimiter=";")
    for row in reader:
        print(row[1])

输出:

https://www.websupplies.gr/epeksergastis-intel-core-i5-8400-9mb-2-80ghz-bx80684i58400
https://www.websupplies.gr/epeksergastis-intel-celeron-g3930-2mb-2-90ghz-bx80677g3930

答案 1 :(得分:2)

只是一个解释。

该问题与csv或其他问题无关。主要原因:

  

字符串短于索引值。换句话说:字符串中没有按索引(split_url[1])的元素

我尝试仅使用变量进行解释:

your_string = 'abc'
print(your_string[0]) # a
print(your_string[1]) # b
print(your_string[2]) # c
# len(your_string) is 3, but you trying to get next item
print(your_string[3]) # IndexError: string index out of range

您可以使用condition(if len(split_url)...)进行修复,但我认为@Rakesh解决方案更好。

希望这会有所帮助。

答案 2 :(得分:0)

我认为您应该使用csv模块,以下几个examples

import csv

csv.register_dialect('myDialect',
delimiter = ';',
skipinitialspace=True)

with open('websupplies2.csv', 'r') as csvFile:
    reader = csv.reader(csvFile, dialect='myDialect')
    for row in reader:
        print(row)

csvFile.close()