Python 从csv文件中检索列并将值提取到另一个csv文件

Python 从csv文件中检索列并将值提取到另一个csv文件,python,csv,Python,Csv,我有一个csv文件,如下所示: lat,lon,date,data1,data2 1,2,3,4,5 6,7,8,9,10 我想从这个csv文件中检索列date和data1并将其提取到另一个csv文件中。我有以下代码: import csv os.chdir(mydir) column_names = ["date", "data1"] index=[] with open("my.csv", "r") as f: mycsv = csv.DictReader(f) for row in my

我有一个csv文件,如下所示:

lat,lon,date,data1,data2
1,2,3,4,5
6,7,8,9,10
我想从这个csv文件中检索列date和data1并将其提取到另一个csv文件中。我有以下代码:

import csv
os.chdir(mydir)
column_names = ["date", "data1"]
index=[]
with open("my.csv", "r") as f:
mycsv = csv.DictReader(f)
for row in mycsv:
    for col in column_names:
        try:
            data=print(row[col])
            with open("test2.txt", "w") as f:
                print(data, file=f)
        except KeyError:
            pass

不幸的是,输出是一个带有“none”的文件。。。是否有人知道如何检索并将我希望使用的数据写入另一个文件?

您在文件中看到
None
的原因是您正在将
打印(行[col])
的结果分配给
数据
变量:

data=print(row[col])
print()
不返回任何内容,因此
data
的内容是
None
。如果您删除
print()
,只保留
data=row[col]
,您将得到一些有价值的东西

我在您的代码中还看到了一个问题,您可能希望解决这个问题:


在第一个循环中,每次迭代都会一次又一次地打开文件。因此,对于每一行,您将使用该行值覆盖整个文件。如果您需要整个列,那么您必须在循环之前打开文件一次。

我建议您使用panda。我还没有运行这个脚本,但是类似的东西应该可以运行

import panda as pd
import csv

frame = pd.read_csv('my.csv')
df=frame[['date','data2']]
with open('test2.csv', 'a', newline='') as csvfile:
        writer = csv.writer(csvfile, delimiter=',',
                            quotechar='|', quoting=csv.QUOTE_MINIMAL) 



        writer.writerow(df)

您的代码存在一些问题:

  • 每次您
    打开(“test2.txt”,“w”)
    w
    选项将打开您的文件并删除其所有内容
  • 您正在存储
    return
    值或
    print
    ,即
    None
    ,然后尝试
    将其打印到您的文件中
  • 将您的CSV读入
    目录的
    列表,如下所示:

    import csv
    with open('your_csv.csv') as csvfile:
        reader = csv.DictReader(csvfile)
    
        read_l = [{key:value for key, value in row.items() if key in ('date', 'data1')}
                  for row in reader]
    
    然后使用
    DictWriter
    写入新的CSV

    with open('new.csv', 'w') as csvfile:
        fieldnames = read_l[0].keys()
        writer = csv.DictWriter(csvfile, fieldnames=fieldnames)
        writer.writeheader()
        for row in read_l[1:]:
            writer.writerow(row)
    

    尝试以下步骤可能会对您有所帮助。但它们需要熊猫库。在执行以下步骤之前,请先安装熊猫库。input.csv包含您提到的数据

    import pandas as pd
    df=pd.read_csv('input.csv')
    df_new=df.iloc[0:,2:4]
    df_new.to_csv("output.csv",index=False)
    

    使用csv.writer或@akshat是的,这正是我的代码所做的。问题是输出与我预期的不同!您没有使用
    CSV
    模块中的
    DictWriter
    writer
    。下面是我的答案。我的另一个建议是使用
    f.write()
    而不是
    print(data,file=f)
    ,这与你的问题没有直接关系
    f.write()
    一开始比将打印重定向到类似文件的对象更明确、更容易理解。虽然我同意pandas是一个很棒的框架,但我认为为这个特殊目的加载它可能有点过火。所讨论的任务非常简单,而且非常简单,可以在标准库中轻松完成,工作量也差不多。