尝试从 python 中的 .split() 函数读取数组后列出索引超出范围错误 - 返回只有 1 个值的数组

List index out of range error after trying to read the array from .split() function in python - returns array with only 1 value

提问人:schnecktec 提问时间:5/3/2023 更新时间:5/3/2023 访问量:40

问:

我有无法从其他程序编辑的 csv 文件。我想使用拆分功能通过符号“;”拆分文件。

1:我打开csv文件 2:我使用readlines() 3:我使用拆分(;) 4. 尝试读出拆分值时出错 da_split[2](返回 1 维数组)

法典:

`    def get_data_csv(self):

        data = []
        
        f = open("./filename.csv", 'r')
        data = f.readlines()

        print('Printout before splitting:')
        print(data)
        data1 = data

        for da in data1:
            da_split = []
            da_split = da.split(";")
            print("Splitted: ")
            print(da_split)

            self.list_date.append(da_split[0])
            self.list_tempAS.append(self.changeStrtoFloat(da_split[1]))`

输出:

Program Start
Printout before splitting:
['Vorbereitung\n', 'Datum;Uhrzeit;Phase;Screen;Key;Interruptions;Temperatur AS;Temperatur SS;Gewichtswerte AS;Gewichtswerte SS;Info/Comment;\n', 'Nov 18;12:59:06;;;;;;;5613.74g;;;\n', 'Nov 18;12:59:01;;;;;;;5630.78g;;;\n', 'Nov 18;12:59:00;;;;;;;;5657.81g;;\n', 'Nov [...]

Splitted: 
['Vorbereitung\n']
Traceback (most recent call last):
  File "C:\Users\sp7820\PycharmProjects\graphLogger\main.py", line 99, in <module>
    main()
  File "C:\Users\sp7820\PycharmProjects\graphLogger\main.py", line 96, in main
    x.get_data_csv()
  File "C:\Users\sp7820\PycharmProjects\graphLogger\main.py", line 44, in get_data_csv
    self.list_tempAS.append(self.changeStrtoFloat(da_split[1]))
IndexError: list index out of range

Process finished with exit code 1

我尝试了str()方法,但它没有任何效果

python csv 拆分 读取行

评论

0赞 jasonharper 5/3/2023
数据的第一行不包含分号,因此将其拆分为分号只会生成一个项目。要么丢弃该行(我假设它是文件中始终存在的标题行),要么在尝试使用它之前检查列表的长度。
0赞 schnecktec 5/3/2023
在你的帮助下,我能够解决它。我不得不添加长度检查符以及是否可以转换为数字
0赞 schnecktec 5/3/2023
我尝试了 csv 库,它给了我更好的结果,再次感谢。

答:

0赞 jpa 5/3/2023 #1
Printout before splitting:
  ['Vorbereitung\n',
   'Datum;Uhrzeit;Phase;Screen;Key;Interruptions;Temperatur AS;Temperatur SS;Gewichtswerte AS;Gewichtswerte SS;Info/Comment;\n',
   'Nov 18;12:59:06;;;;;;;5613.74g;;;\n',
   'Nov 18;12:59:01;;;;;;;5630.78g;;;\n',
   'Nov 18;12:59:00;;;;;;;;5657.81g;;\n',
   'Nov [...]

您的第一行中没有,因此拆分它只会生成一个条目。;

您可能需要添加一个检查以自动省略此类行:len(da_split)

    for da in data1:
        da_split = []
        da_split = da.split(";")
        print("Splitted: ")
        print(da_split)

        if len(da_split) >= 2:
            self.list_date.append(da_split[0])
            self.list_tempAS.append(self.changeStrtoFloat(da_split[1]))

另一种选择是使用内置的 csv 库,它避免了手动拆分:

    import csv
    f = open("./filename.csv", 'r')
    data = list(csv.reader(f, delimiter=';'))

提供以下数据:

   [
     ['Vorbereitung'],
     ['Datum', 'Uhrzeit', 'Phase', 'Screen', 'Key', 'Interruptions', 'Temperatur AS', 'Temperatur SS', 'Gewichtswerte AS', 'Gewichtswerte SS', 'Info/Comment', ''],
     ['Nov 18', '12:59:06', '', '', '', '', '', '', '5613.74g', '', '', '']
     ...
   ]