0

我运行这个脚本非常成功,但很好奇它是如何引用数据的。(我还要怎么学?)

input_file = Cars.csv    
with open(input_file) as f:
    reader = csv.reader(f)
    next(reader)
    cars_list = tuple([row[1] for row in reader])

template_cars ="C:\\Data\\CarsTemplate.txt"
cars_textfile = "C:\\Data\\Cars.txt"
shutil.copyfile(template_cars,cars_textfile)

with open(cars_textfile, 'a') as f:
    if len(cars_list) == 0:
        cars_Sentence = ""

    elif len(cars_list) == 1:
        cars_Sentence = "A  %s is parked on the street." % cars_list

    elif len(cars_list) == 2:
        cars_Sentence = "Cars %s and %s are parked on the street." % cars_list

    else:
        for record in cars_list:
            cars_Sentence = "Cars " + ('%s, ' * (len(cars_list)-1) + 'and %s') % tuple(cars_list) + " are parked on the street"

    f.write(cars_Sentence)
f.close()

我的 Cars.csv 文件的数据:

RecNo,Model,ItemNo,Count  
1,Prius,1,1  
2,Civic,2,3  
3,Lexus,1,5  
4,Jetta,5,1  
5,Subaru,0,0  

鉴于上面的代码适用于我的数据,它如何知道打印出 Model 列而不是其他列?我认为这与包含字符串而不是数字的列有关。

如果我的数据有两列字符串而不是一列,我将如何引用我想要的列并输出相同的结果?只是好奇。试图让我的头脑围绕编码。

再次感谢所有帮助我的人。

4

2 回答 2

1

仅从文件中获取模型列:

cars_list = tuple([row[1] for row in reader])

这会从您的输入中获取每一行(csv 模块将其转换为一系列列),并且只获取第二列(python 使用基于 0 的索引)。

换句话说,编写此代码的人知道输入文件中的每一行包含四列,并且只选择了第二列。如果不同的列包含模型,则必须调整row[1]索引。

于 2013-03-20T16:15:46.520 回答
1

通常,通过阅读(此处为 csv 模块)文档并正确选择,可以对代码进行相当多的改进,使其变得更加健壮和更具可读性。

请注意,在您的 CSV 文件中,第一行表示字段名称;它被您的代码的下一个(读者)调用跳过。

选择最佳类,您不必跳过它,但会对其进行评估以访问这些字段名,第一部分变为:

with open(input_file) as f:
   reader = csv.DictReader(f)
   cars_list = tuple([row["Model"] for row in reader])

这很明显,在哪里改变以获得不同的信息,也适用于文件,其中“模型”列的位置不同。

于 2013-03-20T17:10:27.260 回答