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

时间:2015-06-17 20:44:44

标签: python

我有一个包含4,000多行格式的CSV文件,如...

名称,价格,成本,数量

如何修剪我的CSV文件,只剩下我想要的20个名字?我能够解析/修剪CSV文件,我对如何搜索第1列空白了。

4 个答案:

答案 0 :(得分:2)

使用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)

完成!

答案 1 :(得分:1)

您可以循环访问csv.reader()。它会返回你的行。行由列表组成。比较列表的第一个元素,即row [0]。如果是您想要的,请将该行添加到输出列表中。

答案 2 :(得分:1)

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

for name in $(cat target_names); do grep $name file.csv >> my_new_small_file.csv; done

如果您遇到区分大小写的问题,请使用grep -i。

答案 3 :(得分:1)

我不确定我是否理解你,但下面的片段可以做你想要的吗?

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()

希望这可以有所帮助!