Python 如何解析CSV文件并在第一列中按项搜索

Python 如何解析CSV文件并在第一列中按项搜索,python,Python,我有一个超过4000行的CSV文件,格式如下 名称、价格、成本、数量 如何修剪我的CSV文件,以便只保留我想要的20个名称?我能够解析/修剪CSV文件,但在如何搜索第1列方面我还是一片空白。您可以通过CSV.reader()进行循环。它将返回您的行。行由列表组成。比较列表的第一个元素即行[0]。如果这是您想要的,请将该行添加到输出列表。您可以创建一个ASCII测试文件,将20个名称中的每一个都放在单独的行上(可能称为目标名称)。然后,在命令行(bash)上使用CSV文件(可能称为file.CSV

我有一个超过4000行的CSV文件,格式如下

名称、价格、成本、数量


如何修剪我的CSV文件,以便只保留我想要的20个名称?我能够解析/修剪CSV文件,但在如何搜索第1列方面我还是一片空白。

您可以通过CSV.reader()进行循环。它将返回您的行。行由列表组成。比较列表的第一个元素即行[0]。如果这是您想要的,请将该行添加到输出列表。

您可以创建一个ASCII测试文件,将20个名称中的每一个都放在单独的行上(可能称为目标名称)。然后,在命令行(bash)上使用CSV文件(可能称为file.CSV):


如果您在区分大小写方面有问题,请使用grep-i。

使用
pandas

import pandas as pd

df = pd.DataFrame({'name': ['abc', 'ght', 'kjh'], 'price': [7,5,6], 'cost': [9, 0 ,2], 'quantity': [1,3,4]})

df = pd.read_csv('input_csv.csv') # Your case you would import like this

>>> df

   cost name  price  quantity
0     9  abc      7         1
1     0  ght      5         3
2     2  kjh      6         4

>>> names_wanted = ['abc','kjh']

>>> df_trim = df[df['name'].isin(names_wanted)]

>>> df_trim

      cost   name   price  quantity
  0      9    abc       7         1
  2      2    kjh       6         4
然后将文件导出到csv:

>>> df_trim.to_csv('trimmed_csv.csv', index=False)

完成了

我不确定我是否理解您的意思,但是下面的代码片段可以满足您的需要吗

def FilterCsv(_sFilename, _aAllowedNameList):
  l_aNewFileLines = []
  l_inputFile = open(_sFilename, 'r')
  for l_sLine in l_inputFile:
    l_aItems = l_sLine.split(',')
    if l_aItems[0] in _aAllowedNameList:
      l_aNewFileLines.append(l_sLine)
  l_inputFile.close()

  l_outputFile = open('output_' + _sFilename, 'w')
  for l_sLine in l_aNewFileLines:
    l_outputFile.write(l_sLine)
  l_outputFile.close()
希望这能有所帮助

def FilterCsv(_sFilename, _aAllowedNameList):
  l_aNewFileLines = []
  l_inputFile = open(_sFilename, 'r')
  for l_sLine in l_inputFile:
    l_aItems = l_sLine.split(',')
    if l_aItems[0] in _aAllowedNameList:
      l_aNewFileLines.append(l_sLine)
  l_inputFile.close()

  l_outputFile = open('output_' + _sFilename, 'w')
  for l_sLine in l_aNewFileLines:
    l_outputFile.write(l_sLine)
  l_outputFile.close()