【问题标题】:How to print the 2nd column of a searched string in a CSV?如何在 CSV 中打印搜索字符串的第二列?
【发布时间】:2020-01-10 16:02:07
【问题描述】:

我正在尝试在 CSV 中搜索文件名(在 A 列中)。如果找到它,那么我只想打印第二列(B 列),而不是整行。

CSV 是这样的:

File Name,ID
1234.bmp,1A
1111.bmp,2B

这是我目前所拥有的,但它会打印两列:

import os
import csv

f_name = os.listdir(r'C:\Users\Peter\Documents\Python test\Files')[0]

data = []
with open ("test.csv") as csvfile:
    reader = csv.reader(csvfile)
    for row in reader:
        data.append(row)

col = [x[0] for x in data]

if f_name in col:
    for x in range(len(data)):
        if f_name ==data[x][0]:
            action = print(data[x])

else:
    print("File not listed")

【问题讨论】:

标签: python csv


【解决方案1】:

你很亲密。您只有索引(和print 语句)有问题。

这部分代码之后:

data = []
with open ("test.csv") as csvfile:
    reader = csv.reader(csvfile)
    for row in reader:
        data.append(row)

data 现在将是一个列表列表:

[ 
  ['File Name', 'ID'], 
  ['1234.bmp', '1A'], 
  ['1111.bmp', '2B']
]

在您检查第一列的部分:

if f_name == data[x][0]:
    action = print(data[x])

您打印了data[x],这将是一排。您需要进一步索引它以访问第二列:

print(data[x])     # ['1234.bmp', '1A']
print(data[x][1])  # 1A

此外,print 返回None,所以None 将被保存到action

>>> action = print("123")
123
>>> print(action)
None

您需要将值分配给action,然后是print(action)

if f_name == data[x][0]:
    action = data[x][1]
    print(action)  # 1A or 2B

您还可以通过消除col 来进一步改进代码。我知道这是为了检查 f_name 是否在 CSV 的第一列(“文件名”)中。由于您已经在遍历每个row,因此如果f_namerow 中,您已经可以在那里检查它。如果找到它,将该行的索引存储在一个变量中(例如idx_fname_in_csv),以便稍后您可以直接从data 访问它。这消除了额外的变量col 并避免了两次迭代数据。

import os
import csv

f_name = os.listdir(r'C:\Users\Peter\Documents\Python test\Files')[0]

data = []
idx_fname_in_csv = -1  # invalid

with open("test.csv") as csvfile:
    reader = csv.reader(csvfile)
    for idx, row in enumerate(reader):
        data.append(row)
        if f_name in row:
            idx_fname_in_csv = idx

if idx_fname_in_csv > 0:
    action = data[idx_fname_in_csv][1]
    print(action)
else:
    print("File not listed")

这里data 仍然具有相同的内容(列表列表),但我使用enumerate 来跟踪索引。

【讨论】:

  • 谢谢你的工作更好,更干净,这是我写的第一个代码
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-04-11
  • 1970-01-01
相关资源
最近更新 更多