2016-04-22 77 views
0

我是python的新手,并试图了解如何使用csv阅读器对数据进行排序。我已经阅读了这个网站上的一些指南,但似乎没有什么与我正在尝试的内容有关。只读与csv列表中的数据匹配的python

我有一个名为buildings.csv csv文件,用列表数据编译如下:

[ 'VANGARDE MONKS CROSS', '1292', 'YO32 9AE', '大不列颠',“零售”, '交易', ''] [ '乡村DOUGLAS软木SF', '418', '软木', '爱尔兰', '零售', '交易', '']

什么我想知道的是,如何仅返回列表中包含单词'IRELAND'的行?目前我所要做的就是让终端读取文本文件的输出。

+0

这取决于您稍后想要处理的数据。我会将数据读入一个pandas DataFrame中,然后删除没有'IRELAND'的行。它也可以建立一个字典,并在阅读时检查。 – MERose

+0

它是一个在使用熊猫之前学习python的学习练习,我想知道如何用标准语法来做到这一点。也许将输出的行导出到新的CSV文件中。 – glister11

回答

0

这里有一个简单的方法,如果你只是想打印线:

with open('buildings.csv', 'r') as f: 
    for line in f: 
     if(line.find("IRELAND")!=-1): 
      print(line) 
0

我认为你必须遍历行。也许这样?

l = [['VANGARDE MONKS CROSS', '1292', 'YO32 9AE', 'GREAT BRITAIN', 'Retail', 'Trading', ''], ['VILLAGE DOUGLAS CORK SF', '418', 'CORK', 'REPUBLIC OF IRELAND', 'Retail', 'Trading', '']] 
for row in l: 
    if any("IRELAND" in s for s in row): 
     print "match" 
0

如果你想保持它的简单,而从CSV阅读他们只是过滤行:

with open('buildings.csv', 'rb') as csvfile: 
    csv_reader = csv.reader(csvfile) 
    for row in csv_reader: 
     if any("IRELAND" in s for s in row): 
      print ', '.join(row) 

但是,通常您可以使用Pandas或类似库进行筛选,排序,旋转等操作,从而为您节省大量时间。

0

虽然你说你不想使用pandas,这里是一个解决方案,可能进一步参考:

>>> import pandas as pd 

>>> l = [['VANGARDE MONKS CROSS', '1292', 'YO32 9AE', 'GREAT BRITAIN', 'Retail', 'Trading', ''], 
    ['VILLAGE DOUGLAS CORK SF', '418', 'CORK', 'REPUBLIC OF IRELAND', 'Retail', 'Trading', '']] 

>>> df = pd.DataFrame(l) # you can read a file here as well 
>>> new_df = df.loc[df[3].apply(lambda x: "IRELAND" in x)] 
>>> new_df 
         0 1  2     3  4  5 6 
1 VILLAGE DOUGLAS CORK SF 418 CORK REPUBLIC OF IRELAND Retail Trading 

df[3].apply(lambda x: "IRELAND" in x)充当过滤器:它返回一个布尔值向量,其中True表明IRELAND是在列3的一行。df.loc[]返回参数为true的数据帧。