Python-使用csv模块从csv文件中读取特定列?

发布于 2021-02-02 23:16:57

我正在尝试解析一个csv文件,并仅从特定列中提取数据。

范例csv:

ID | Name | Address | City | State | Zip | Phone | OPEID | IPEDS |
10 | C... | 130 W.. | Mo.. | AL... | 3.. | 334.. | 01023 | 10063 |

我想只捕获特定的列,说IDNameZipPhone

我看过的代码使我相信我可以通过其对应的编号来调用特定的列,即:Name将对应于2并遍历每一行使用row[2]会产生列2中的所有项目。只有它不能。

到目前为止,这是我所做的:

import sys, argparse, csv
from settings import *

# command arguments
parser = argparse.ArgumentParser(description='csv to postgres',\
 fromfile_prefix_chars="@" )
parser.add_argument('file', help='csv file to import', action='store')
args = parser.parse_args()
csv_file = args.file

# open csv file
with open(csv_file, 'rb') as csvfile:

    # get number of columns
    for line in csvfile.readlines():
        array = line.split(',')
        first_item = array[0]

    num_columns = len(array)
    csvfile.seek(0)

    reader = csv.reader(csvfile, delimiter=' ')
        included_cols = [1, 2, 6, 7]

    for row in reader:
            content = list(row[i] for i in included_cols)
            print content

并且我希望这只会打印出我想要的每一行的特定列,除非不是,我只会得到最后一列。

关注者
0
被浏览
101
1 个回答
  • 面试哥
    面试哥 2021-02-02
    为面试而生,有面试问题,就找面试哥。

    你会得到从这个代码的最后一列的唯一方法是,如果你不包括你的print语句中的for循环。

    这很可能是代码的结尾:

    for row in reader:
        content = list(row[i] for i in included_cols)
    print content
    

    你希望它是这样的:

    for row in reader:
            content = list(row[i] for i in included_cols)
            print content
    

    既然我们已经解决了你的错误,那么我想花时间向你介绍pandas模块。

    Pandas在处理csv文件方面非常出色,以下代码将是你读取csv并将整列保存到变量中所需的全部:

    import pandas as pd
    df = pd.read_csv(csv_file)
    saved_column = df.column_name #you can also use df['column_name']
    

    因此,如果你想将列中的所有信息保存Names到变量中,则只需执行以下操作:

    names = df.Names
    

    这是一个很棒的模块,建议你研究一下。如果由于某种原因你的打印语句处于for循环状态,并且仍然仅打印出最后一列,则不应该发生,但是请让我知道我的假设是否错误。你发布的代码有很多缩进错误,因此很难知道应该在哪里。希望这对你有所帮助!



知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看