从 CSV 文件中提取信息

Extract info from CSV file

我想从 csv 文件中提取信息,为此我想创建一个“函数”,每次我为特定“行”调用它时都可以获取信息。下面是我的代码,但是当我 运行 它时它 return 空白。我在这里错过了什么吗?提前致谢

class person:
  def __init__(self,name):
    self.name = name

def importList():
  with open('attendees3.csv', 'r') as f:
    reader = csv.reader(f)
    return [person(name) for name in reader]
    
for person in importList():
  print(person.name)

看起来您很可能遇到了这段代码中的缩进问题。由于缩进,发生的事情是您在 class“人”中定义函数“importList”,另一个问题是用于调用 importList 的代码出现在 importList 本身内部。没有输出的原因是因为您只声明了 class 而不是 运行ning 任何其他代码。

代码可能如下所示:

import csv

class person:
  def __init__(self,name):
    self.name = name

def importList():
  with open ('attendees3.csv','r') as f:
    reader = csv.reader(f)
    return [person (name) for name in reader]

for person in importList():
  print(person.name)
  

我能够 运行 使用此示例 csv 文件内容:

name
John Smith
Jane Smith
Bob Boblaw

并得到以下输出:

['name']
['John Smith']
['Jane Smith']
['Bob Boblaw']

我不会对其他注意事项发表评论,因为我假设您是在受控环境下处理一些简单的代码。

您真的有一个 CSV file,还是只有一个包含名称的文件?如果是后者那么你就不需要使用csv.reader(),直接读取文件就可以了。

如果是前者,则行将作为字符串列表返回,每个字符串都是文件中的一个字段。默认情况下,逗号分隔字段。您需要根据需要访问各个字段。您的代码将整行(列表)传递给 person 构造函数,因此成员 name 的值将是该列表,而不是作为字符串的名称。

假设 CSV 文件中只有一个字段,row[0] 将是 CSV reader 返回的行中的那个字段。您可以像这样更改函数以访问行中的第一项:

def importList():
    with open ('attendees3.csv', newline='') as f:
        reader = csv.reader(f)
        return [person(row[0]) for row in reader]

如果您没有“真正的”CSV 文件,您可以这样阅读:

def importList():
    with open ('attendees3.csv') as f:
        return [person(line.strip()) for line in f]

此代码只是读取每一行,删除任何前导和尾随空格,并创建 person 个对象。