从CSV文件中读取行Python给了我“”而不是''(类)

问题描述 投票:0回答:1

我正在阅读Python中的CSV文件,如下所示:

REGION,1910,1920,1930,1940,1950,1960,1970,1980,1990,2000,2010
Alabama,2138093,2348174,2646248,2832961,3061743,3266740,3444165,3893888,4040587,4447100,4779736
Alaska,64356,55036,59278,72524,128643,226167,300382,401851,550043,626932,710231

我的问题是,当我读第一行时,它将其读作

REGION,1910,1920,1930,1940,1950,1960,1970,1980,1990,2000,2010

这首先看起来并不像问题那么多。但是后来我找了一个数字,所以将字符串拆分成一个列表

lijst_eerste_regel = self.eerste_regel.split(",")

然后寻找str(2010)的索引,但Python似乎在寻找'2010'而不是“2010”。因此,它找不到索引。

我在这里发布代码(它是在一个类我遇到这个问题,不确定是否相关)

import io

class Volkstelling:

    def __init__(self,jaartal,csvb):
        """
        >>> vs2010 = Volkstelling(2010, 'vs_bevolkingsaantal.csv')
        """
        import csv
        self.jaartal = jaartal
        self.csvb = csvb

        self.eerste_regel = next(self.csvb)

        if str(jaartal) not in self.eerste_regel:
                raise AssertionError ("geen gegevens beschikbaar")

    def inwoners(self, regio):

        lijst_eerste_regel = self.eerste_regel.split(",")

        plaats_jaartal = lijst_eerste_regel.index(self.jaartal)  # here is where the error occurs

data = """REGION,1910,1920,1930,1940,1950,1960,1970,1980,1990,2000,2010
Alabama,2138093,2348174,2646248,2832961,3061743,3266740,3444165,3893888,4040587,4447100,4779736
Alaska,64356,55036,59278,72524,128643,226167,300382,401851,550043,626932,710231"""
v = Volkstelling('2010',io.StringIO(data))
v.inwoners('Alabama')
## ValueError: '2010' not in list
python class csv split
1个回答
0
投票

您的代码有几个导致2010未找到的问题:

  1. 如果你读入文件,每行都有一个newline character,通常表示为\n,最后。将以下代码插入inwoners函数以查看2010年后面的换行符: print(lijst_eerste_regel) 您可以使用python函数'SOME STRING'.strip()删除空格和换行符
  2. 你的函数没有返回一个值,所以你从None得到inwoners,即使它能正常运行。

以下示例有效:

import io

class Volkstelling:

    def __init__(self,jaartal,csvb):
        """
        >>> vs2010 = Volkstelling(2010, 'vs_bevolkingsaantal.csv')
        """
        import csv
        self.jaartal = jaartal
        self.csvb = csvb

        self.eerste_regel = next(self.csvb)

        if str(jaartal) not in self.eerste_regel:
                raise AssertionError ("geen gegevens beschikbaar")

    def inwoners(self, regio):

        lijst_eerste_regel = [s.strip() for s in self.eerste_regel.split(",")]
        plaats_jaartal = lijst_eerste_regel.index(self.jaartal) 

        return plaats_jaartal # Returns the column index where to find the no of inhabitants

data = """REGION,1910,1920,1930,1940,1950,1960,1970,1980,1990,2000,2010
Alabama,2138093,2348174,2646248,2832961,3061743,3266740,3444165,3893888,4040587,4447100,4779736
Alaska,64356,55036,59278,72524,128643,226167,300382,401851,550043,626932,710231"""

v2 = Volkstelling('1920',io.StringIO(data))
print(v2.inwoners('Alabama'))
## -> prints 2
v1 = Volkstelling('2010',io.StringIO(data))
print(v1.inwoners('Alabama'))
## -> prints 11
© www.soinside.com 2019 - 2024. All rights reserved.