需要帮助查找包含数组中的值的CSV行吗

2024-09-30 04:35:19 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个数组LiveTick = ['ted3m index','US0003m index','USGG3m index'],我正在读取一个CSV文件book1.csv。我必须找到包含csv中的值的行。你知道吗

例如,第15行将包含ted3m index 500 | 600,第20行将包含US0003m index 800 | 900,同样。你知道吗

然后我必须得到行中包含的值,并为数组LiveTick中包含的每个值解析它。我该怎么做?下面是我的示例代码:

 with open('C:\\blp\\book1.csv', 'r') as f:
   reader = csv.reader(f, delimiter=',')
   writer = csv.writer(outf)
   for row in reader:
      for list in LiveTick:
         if list in row:
            print ('Found: {}'.format(row))

Tags: csvinforindex数组listreaderwriter
2条回答

你可以使用熊猫,它的速度非常快,可以为你完成所有的阅读、写作和过滤工作:

import pandas as pd

df = pd.read_csv('C:\\blp\\book1.csv')
filtered_df = df[df['your_column_name'].isin(LiveTick)]

# now you can save it
filtered_df.to_csv('C:\\blp\\book_filtered.csv')

你的想法是对的,但是你可以做一些改进:

  • 使用any将第一列与多个值进行比较,而不是使用不会短路的嵌套for循环。你知道吗
  • 边写边写csv,而不是只写print。这是内存有效的,因为您在任何时候只在内存中保存一行。你知道吗
  • with语句中将outf定义为open对象。你知道吗
  • 不要隐藏内置的list。对LiveTick中的元素使用另一个标识符,例如i。你知道吗

下面是一个演示:

with open('in.csv', 'r') as f, open('out.csv', 'wb', newline='') as outf:
    reader = csv.reader(f, delimiter=',')
    writer = csv.writer(outf, delimiter=',')
    for row in reader:
        if any(i in row[0] for i in LiveTick):
            writer.writerow(row)

相关问题 更多 >

    热门问题