Python 如何从一个文件中提取特定数据并将其添加到特定位置的另一个文件中?

Python 如何从一个文件中提取特定数据并将其添加到特定位置的另一个文件中?,python,csv,parsing,Python,Csv,Parsing,我正在学习如何使用python 对于我正在进行的项目,我有数百个包含城市、物种和时间的数据表(speciesname.csv)。 我还有一个数据表,其中包含世界上所有城市的纬度和经度点(cities.csv) 我的目标是在每个(speciesname.csv)数据表中增加两列纬度和经度(来自cities.csv),对应于每个物种的位置。 我猜我的工作流程会是这样的: 进入speciesname.csv文件并在每行上找到位置 进入cities.csv并从speciesname.csv中搜索位置 将

我正在学习如何使用python

对于我正在进行的项目,我有数百个包含城市、物种和时间的数据表(speciesname.csv)。
我还有一个数据表,其中包含世界上所有城市的纬度和经度点(cities.csv)

我的目标是在每个(speciesname.csv)数据表中增加两列纬度和经度(来自cities.csv),对应于每个物种的位置。 我猜我的工作流程会是这样的: 进入speciesname.csv文件并在每行上找到位置 进入cities.csv并从speciesname.csv中搜索位置 将相应的纬度和经度复制到speciesname.csv中的新列中

我一直没有成功地在我的博客帖子或其他人与类似的问题搜索。我不知道从哪里开始,所以任何有起点的人都会很有帮助


谢谢。

你可以通过多种方式实现。 我能想到的解决这个问题的最简单方法是:

  • 收集字典中的所有cities.csv数据
    {“cityname”:(lat,lon),…}
  • 逐行阅读speciesname.csv,并在字典中按键(key==speciesname\u cityname)搜索每一行
  • 当您找到一个对应关系时,将该行和由逗号分隔的lat&lon中的所有数据添加到一个缓冲字符串中,该缓冲字符串必须以“\n”字符结尾
  • 当foreach行结束时,缓冲区字符串将包含所有数据,并可用作write to file函数的输入

  • 这里有一个小程序,如果你把它和你的CSV放在同一个文件夹中,它应该可以工作。我假设你只有两张床单,一张是城市,另一张是物种。你的描述说城市信息存在于数百个数据表中,这让人感到困惑,因为你说这些信息都存在于一个csv中

    该程序将两个单独的CSV文件转换为熊猫数据帧格式,然后可以在公共城市列上合并。然后,它从连接的数据帧创建一个新的CSV

    为了使这个程序能够工作,您需要安装pandas,这是一个专门用于处理表格(电子表格)格式内容的库。我不知道您使用的是什么系统,因此您必须从这里找到自己的说明:

    这是csv没有标题的版本,当第一行只是一些数据时

    # necessary for the functions like pd.read_csv
    import pandas as pd 
    
    species_column_names = ['city','species','time']
    speciesname = pd.read_csv('speciesname.csv', names=species_column_names, header=None)
    
    cities_column_names = ['city','lat','long']
    cities = pd.read_csv('cities.csv', names=cities_column_names, header=None)
    # this joining function relies on both tables having a 'city' column 
    combined = speciesname.join(cities.set_index('city'), on='city')
    
    combined_csv = combined.to_csv()
    
    如果两个文件都有标题,请使用这两行忽略第一行,因为我不知道它们是如何拼写/大写的/无论什么,并且我们是基于所有小写自定义列名合并的:

    import pandas as pd 
    
    species_column_names = ['city','species','time']
    speciesname = pd.read_csv('speciesname.csv', names=species_column_names, skiprows = 0, header=None)
    
    cities_column_names = ['city','lat','long']
    cities = pd.read_csv('cities.csv', names=cities_column_names, skiprows = 0, header=None)
    # this joining function relies on both tables having a 'city' column 
    combined = speciesname.join(cities.set_index('city'), on='city')
    
    combined_csv = combined.to_csv()
    

    这回答了你的问题吗?对于这类事情,SQL是一个更好的工具。然而,Python有pandas库,它可以处理少量csv,或者如果文件大小不是太大,我已经用pandas发布了一个答案。太好了!请向上投票并点击此答案上的“接受”,以便将来其他人在将答案添加到此页面时看到此浮动在顶部!