Python 从csv文件中检索列并将值提取到另一个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
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
,然后尝试将其打印到您的文件中
目录的列表,如下所示:
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是一个很棒的框架,但我认为为这个特殊目的加载它可能有点过火。所讨论的任务非常简单,而且非常简单,可以在标准库中轻松完成,工作量也差不多。