【问题标题】:Huge list in Python returning None elementsPython中返回None元素的巨大列表
【发布时间】:2017-03-08 05:40:17
【问题描述】:

我有一个 CSV 文件,例如:

134;football
1457;soccer
12;volley
...

它正好有 4.992.909 行。代码是:

with open('/Users/someone/Desktop/python/sports.csv', 'r') as file1:        
    f = set(file1)

sports_label_list = [None] * 9985818

i = 0

for line in f:
    sports = line.split(';')[0]
    sports_label_list[i] = sports
    i = i + 1
    if 'football' in line:
        sports_label_list[i] = 'football'
    if 'volley' in line:
        sports_label_list[i] = 'volley'
    if 'basketball' in line:
        sports_label_list[i] = 'basketball'
    if 'soccer' in line:
        sports_label_list[i] = 'soccer'
    i = i + 1

当我打印以检查 sports_label_list 时,它运行正常(在偶数处显示数值,在奇数处显示运动名称)直到列表的 30000 元素附近。之后,它开始打印“无”。 CSV 文件没问题。有什么建议?谢谢!

【问题讨论】:

  • 该文件可能有重复的行,set 消除了这些行。你为什么要把它放在一个集合中?不必要地使用内存。
  • 你为什么不用list.append()
  • 重复的行很重要。

标签: python list file csv size


【解决方案1】:

文件可能有重复的行,设置消除。你为什么要把它放在一个集合中?不必要的内存使用。一个更好、更快的选择是逐步建立列表:

sports_label_list = []

with open('/Users/someone/Desktop/python/sports.csv', 'r') as file1:   
    for line in file1:
        number, sport = line.strip().split(";")
        sport_label_list.append(number)
        if sport in ("football", "soccer", "baseball", "basketball"):
            sport_label_list.append(sport)
        else:
            sport_label_list.append(None)

【讨论】:

  • 不错!但还有一个问题:它是从同一条线路返回的吗?我正在检查但不确定 list = ['1457', 'soccer, '134', 'football', ...] 因为它需要。
  • 没关系!谢谢
  • 没问题。如果这解决了你的问题,你可以接受我的回答。
猜你喜欢
  • 2015-05-08
  • 1970-01-01
  • 2018-07-09
  • 2023-02-07
  • 2015-01-31
  • 2021-06-04
  • 2016-11-09
  • 1970-01-01
  • 2014-07-03
相关资源
最近更新 更多