读取 .csv 文件的 Python 函数

0 投票
2 回答
5927 浏览
提问于 2025-04-28 19:02

我正在写一个脚本,需要给文件名添加一个唯一的ID。

文件名是从一个文本文件中获取的(通过第一个函数),然后传递给第二个函数进行格式化,接着再传递给第三个函数。这个第三个函数的任务是搜索一个包含多列的.csv文件,找到正确的那一行(这行包含了通过前两个函数传入的值),然后从这一行中获取'FID'列的值(可以是整数或字符串),最后打印这个值。

代码如下:

def get_file_name():
    # this func gets the name of the file to be renamed
    before_rename = open('C:/Users/my.path/before_rename.txt', 'r')
    to_be_renamed_unf = before_rename.readline()[1:]
    # remove the end CRs & LFs off of the string
    to_be_renamed = to_be_renamed_unf.strip()
    print("File name: " + to_be_renamed)
    return to_be_renamed

def get_fname():
    # get farmer name
    file_name = get_file_name()
    farmer_name = re.sub('[^A-Z]', ' ', file_name).rstrip().lstrip()
    print(farmer_name)
    return farmer_name

def get_id_from_file():
    # search csv for COOP & Name to find the FID
    csvfile = 'C:/Users/my.path/csv_file_to_read_from.csv'
    # create a dictionary from the csv
    csv_dict = csv.DictReader(open(csvfile))

    fname = get_fname()
    coop_name = 'CALMAN' 
    for row in csvfile:
        if fname and coop_name in row:  
            farmer_id = int(row['FID'])
            print(farmer_id)

get_id_from_file()

当前的输出结果是:

File name: unformatted_file_NAME 03928
NAME

看起来搜索循环完全没有执行;因为这是前两个函数的预期输出,而且我没有收到任何错误信息。

部分.csv文件内容:

FID,Name,COOP
12345-29981662553784,bar FOO BAR, FOOBAR
12345-29981662553784,FOO BAR, FOOBAR
12345-29981662553784,FOO BAR, FOOBAR
12345-29981662553784,FOO BAR, FOOBAR
12345-29981662553784,FOO BAR, FOOBAR
12345-29981662553784,FOO BAR, FOOBAR
12345-29981662553784,FOO BAR, FOOBAR
12345-29981662553784,FOO BAR, FOOBAR
12345-29981662553784,FOO BAR, FOOBAR
12345-29981662553784,FOO BAR, FOOBAR
12345-29981662553784,FOO BAR, FOOBAR
12345-29981662553784,FOO BAR, FOOBAR
12345-29981662553784,FOO BAR, FOOBAR
暂无标签

2 个回答

0

你试过用 pandas.read_csv 吗?这个方法能让你读取和搜索/过滤 CSV 文件变得比我们自己写的任何代码都要高效得多。

http://pandas.pydata.org/pandas-docs/stable/generated/pandas.io.parsers.read_csv.html

1

试试这个:

#!/usr/bin/env python
#-*- coding:utf-8 -*-

import csv

def get_file_name():
    # this func gets the name of the file to be renamed
    before_rename = open('C:/Users/my.path/before_rename.txt', 'r')
    to_be_renamed_unf = before_rename.readline()[1:]
    # remove the end CRs & LFs off of the string
    to_be_renamed = to_be_renamed_unf.strip()
    print("File name: " + to_be_renamed)
    return to_be_renamed

def get_fname():
    # get farmer name
    file_name = get_file_name()
    farmer_name = re.sub('[^A-Z]', ' ', file_name).rstrip().lstrip()
    print(farmer_name)
    return farmer_name

def get_id_from_file():
    # search csv for COOP & Name to find the FID
    csvfile = 'C:/Users/my.path/csv_file_to_read_from.csv'
    # create a dictionary from the csv
    csv_dict = csv.DictReader(open(csvfile))

    fname = get_fname()
    coop_name = 'CALMAN' 
    for row in csv_dict:
        if fname in row:
            if coop_name in row:
                farmer_id = int(row['FID'])
                print(farmer_id)

get_id_from_file()

撰写回答