使用csv modele从更大的fi中提取特定的文本行

2024-09-30 01:29:08 发布

您现在位置:Python中文网/ 问答频道 /正文

所以我用这个程序从这个更大的文件中提取我想要的行:

import csv

name = ['NAMETHEFIRST,' 'NAMEANOTHERNAME ']
data = csv.reader(open('C:\\bigfile.csv'))

with open('C:\\smalldataset.xcl','w') as outf:
    csv.writer(outf).writerows(l for l in data if l[0] in name)

程序运行。但是,我只从NAMETHEFIRST获取数据行,而没有从NAMETHEOTHERNAME中获取写入我的小数据集文件的数据。这就像我想从第一个名称的数据行的大数据集中打印所有相关信息一样,但是我没有从第二个名称获取任何信息另一个名称写入较小的文件。为什么这个没用?在


Tags: 文件csv数据nameinimport程序名称
2条回答

这行代码

name = ['NAMETHEFIRST,' 'NAMEANOTHERNAME ']

相当于

^{pr2}$

因为Python在编译时跟随C来连接相邻的字符串常量。在

你说“我只从NAMETHEFIRST获取数据行,而没有从NAMETHEOTHERNAME中获取数据写入我的小数据集文件”“”,但是您显示的代码不会产生该结果;它只会选择以开头的行

"NAMETHEFIRST,NAMEANOTHERNAME ", 

只有当该行实际为:

name = ['NAMETHEFIRST', 'NAMEANOTHERNAME ']

这大概是因为文件中的第二个名称没有如上所述的尾随空格。在

其他问题:

csv.writer(outf).writerows(l for l in data if l[0] in name)太聪明了。如果将其分解成小块,则可以更轻松地使用调试器或打印语句来显示实际发生的情况。在

试试这个:

print len(name), name
data = csv.reader(open('C:\\bigfile.csv', 'rb')) # ALWAYS open csv files in BINARY mode
with open('C:\\smalldataset.xcl','wb') as outf: # ALWAYS open csv files in BINARY mode
    writer = csv.writer(outf)
    for row_index, row in enumerate (data): # don't use 'l' as a variable name
        print row_index + 1, row
        if row[0] in name:
            writer.writerow(row)

这是一个包含一个字符串的列表:

['NAMETHEFIRST,' 'NAMEANOTHERNAME ']

这是一个包含两个字符串的列表:

^{pr2}$

注意逗号的位置。在

还要注意,第二个字符串的末尾有一个空格。在

相关问题 更多 >

    热门问题