如何从csv文件中准确地打印出它是如何写的?

gstyhher  于 2023-04-03  发布在  其他
关注(0)|答案(2)|浏览(134)

我必须创建一个查找文件ID列的函数(因为它可以在标题中的任何地方被索引),一旦找到它,ID列将检查给定ID是否等于列中的任何ID。如果是,它返回与给定ID相关联的数据行。**不能使用任何类型的导入。**I'我的第一部分是正确的,但是最后一个测试用例让我很困惑,因为列不一样,所以我没有按照正确的顺序得到答案。
(我以前写过打开和读取文件等的函数)这是我现在的代码:

def ecu_data(arbitration_id, data):
    """ Returns a list of the timestamp and data of an arbitration_ID. """
    rows = []
    arb_index = data[0].index("Arbitration_ID")
    for row in data[0:]:
        if row[arb_index] == arbitration_id:
            rows.append(row)
    return rows

这三个测试用例是:
x一个一个一个一个x一个一个二个一个x一个一个三个一个
前两种情况期望并接收输出:['1597759710.1258929', '153', '8', '20 A1 10 FF 00 FF 50 1F', 'Normal', 'Normal']['1597759710.345933', '153', '8', '20 A1 10 FF 00 FF C0 8F', 'Normal', 'Normal'],而第三种情况期望输出:['1597759356.234800', '8', '368', '00 00 00 00 00 FA 0A 40', 'Normal', 'Normal']并接收:['1597759356.234800', '368', '8', '00 00 00 00 00 FA 0A 40', 'Normal', 'Normal']
如何修改代码,使行在文件中的打印方式与它们在文件中的打印方式完全一致?

lstz6jyr

lstz6jyr1#

下面的函数需要一个csv文件名和一个ID来搜索。它将打开文件,然后使用DictReader将每一行的标题行读取到字典中。然后它将返回任何Arbitration_ID匹配search_id的行的values()(或者您也可以通过删除.values()来返回dict)

import csv
def find_rows_by_id(file, search_id):
    with open(file) as f:
        return [row.values() for row in csv.DictReader(f) if row['Arbitration_ID'] == search_id]

print(find_rows_by_id('file1.csv','153'))
lc8prwob

lc8prwob2#

下面是一个代码片段,它有一个函数,可能会帮助你解决你的问题。

说明:

1.此函数使用“with”语句读取指定的文件。
1.现在我们将读取第一行,并使用','(逗号)分隔符将其拆分,因为我们有一个CSV文件。strip() 函数用于删除 split(',') 函数生成的元素中存在的任何空字符或空格。
1.如前所述,ID列可以在标题中的任何位置进行索引,我们将其索引值存储在变量 id_index 中,并将其用于引用。
1.如果没有找到ID列,我们将返回None作为输出。
1.现在我们将循环遍历文件,并使用类似的函数 .strip().split(',') 来存储每次迭代中特定行的示例。
1.现在是最后一部分;我们将使用条件语句并检查满足ID的行的示例,最后返回整行。

代码:

def find_row_by_id(filename, id_to_find):
    with open(filename, 'r') as f:
        header = f.readline().strip().split(',')
        id_index = None
        for i, col_name in enumerate(header):
            if col_name == 'ID':
                id_index = i
                break
        if id_index is None:
            return None

        for line in f:
            row = line.strip().split(',')
            if row[id_index] == id_to_find:
                return row

    return None

相关问题