从 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
个对象。
我想从 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
个对象。