从CSV创建一个新列表

时间:2018-05-29 22:17:50

标签: python csv

所以,我已经根据输入搜索了显示某个csv字段的方法,并且我尝试将代码应用于我的程序。但问题是我想在csv中获取某个项目并从某个索引创建一个新列表。

我有这样的csv文件:

code,place,name1,name2,name3,name4
001,Home,Laura,Susan,Ernest,Toby
002,Office,Jack,Rachel,Victor,Wanda
003,Shop,Paulo,Roman,Brad,Natali
004,Other,Charles,Matthew,Justin,Bono

起初我有这个代码,它可以显示所有行:

import csv

number = input('Enter number to find\n')

csv_file = csv.reader(open('residence.csv', 'r'), delimiter=",")

for row in csv_file:
    if number == row[0]:
        print (row)

**input : 001
**result : [001, Home, Laura, Susan, Ernest, Toby]

然后,我尝试在结果中创建一行,将项目添加到新列表中。但它没有用。这是代码:

import csv

res = []
y = 2
number = input('Enter number to find\n')

csv_file = csv.reader(open('residence.csv', 'r'), delimiter=",")

for row in csv_file:

    if number == row[0]:
        while y <= 5:
            res.append(str(row[y]))
            y = y+1

print (res)

**input : 001
**expected result : [Laura, Susan, Ernest, Toby]

我想创建一个包含行name1name2name3name4的新列表,然后我想打印列表。但我猜这个循环错误放置或错过了什么。

1 个答案:

答案 0 :(得分:0)

您可以在代码中修复一些事项。

  1. 迭代行时,您没有跳过标题行。这意味着您不会总是匹配实际的行号。
  2. 您的y变量未重新初始化。无论如何,使用for循环而不是while会更加惯用。
  3. 如果多个行匹配,它将会中断(参见2.)。如果您知道永远不会有多个匹配项,那么在将值附加到列表后,您应该break
  4. 您的文件永远不会关闭。此外,还应使用newline=''(请参阅csv module docs
  5. 打开它
  6. 最后,您匹配实际字符串('001')与整数(1),这可能是输入输入时的混淆来源。
  7. 更新版本:

    import csv
    
    res = []
    number = input('Enter number to find\n')
    
    with open('residence.csv', newline='') as csv_file:
        csv_reader = csv.reader(csv_file, delimiter=",")
        next(csv_reader)  # Skip header line
        for row in csv_reader:
            if number == row[0]:
                for i in range(2, 6):
                    res.append(str(row[i]))
                break
    
    print(res)