将.csv中的特定行和列复制到.xlsx中

时间:2015-07-05 18:50:40

标签: python excel csv

我对编程非常陌生,所以这将是粗糙的哈哈,但是,我是一名乌龟科学家,所以你的耐心和优秀的建议将有助于龟保护^ _ ^

所以,我有一个.csv与A列中的几种海龟物种之一,以及B列(Northings)和C(Eastings)中的UTM坐标。我需要为某些物种获取行(例如,列A为SPTU [spotted turtle fyi]的每一行)然后将所有这些行保存在预先存在的.csv中,覆盖所有旧坐标。这是我到目前为止所使用的,我正在使用PyCharm和Python 3.somethin:

对于glob.glob中的wsurvey-20150630.csv(“c:/ Users / Vito / Desktop / GIS / Latitude and Longitudes / wsurvey / wsurvey-20150630.csv”):

(f_path, f_name) = os.path.split(wsurvey-20150630.csv)
(f_short_name, f_extension) = os.path.splitext(f_name)
ws = wb.add_sheet(f_short_name)
spamReader = csv.reader(open(wsurvey-20150630.csv, 'rb'))
for row in "wsurvey-20150630latlon.csv":
if "SPTU" in row:
    for rowx, row in enumerate(spamReader):
        for colx, value in enumerate(row):
            ws.write(rowx, colx, value)

wb.save(“c:/ Users / Vito / Desktop / GIS / UTM Coordinates / SPTU UTM Coordinates.csv”)

所以这基本上只是一堆代码,我从教程和诸如此类的东西中复制粘贴并尝试制作工作,呃它不起作用,可能是可怕的,可怕的错误。请想想那些可怜的,微小的,无助的乌龟。

然后,QGIS地图将读取更新的.csv中的坐标。我们的想法是每天使用新的乌龟坐标自动更新地图一次;乌龟坐标周围的湿地将受到保护。我们与六个物种合作,其中五个处于危险之中,其中一个物种濒临灭绝,一个物种受到威胁。帮助我们拯救海龟!

1 个答案:

答案 0 :(得分:1)

没有冒犯,但你的代码是疯狂混乱的XD。对于这些类型的操作,Python非常容易编程。

如果您想打开一个文件进行阅读和另一个文件或写作,我建议使用此文件(这仅适用于CSV或其他文本文件。不是MICROSOFT EXCEL。)

请记住,这会覆盖该文件。

import csv

open("writefile.csv", "w").close() #Deletes everything in the file. Backspace this if you don't want the file contents deleted. 

with open("readfile.csv", "r") as r, open("writefile.csv", "a") as w: 
    reader = csv.reader(r, lineterminator = "\n")
    writer = csv.writer(w, lineterminator = "\n")

    for row in reader:
        if "SPTU" in row: #"SPTU" Has to be the entire value of the column. Please comment if you want to see if one of the columns CONTAINS "SPTU
            w.writerow(row)  

对于excel,最好先在计算机上安装特定的python模块。请找到你的Python文件夹(例如,我有Python34,因为我使用的是Python 3.4)。现在,将构建路径复制到此文件夹并打开命令提示符。 (如果你知道所有这些东西,请跳过,我只想打字)。输入cd(包括空格),然后输入right-click + paste路径。现在,输入cd Scripts。最后,做pip install openpyxl

现在,使用此代码为每个csv创建一个excel。 (基于https://openpyxl.readthedocs.org/en/latest/的示例代码)

from openpyxl import Workbook
def writeToExcel(rows, filename):
    wb = Workbook()
    ws = wb.active
    for row in rows:
        ws.append(row)

    ws.save(filename)

import csv

rows = []
with open("readfile.csv", "r") as r: 
    reader = csv.reader(r, lineterminator = "\n")

    for row in reader:
        if "SPTU" in row: #"SPTU" Has to be the entire value of the column. Please comment if you want to see if one of the columns CONTAINS "SPTU
            rows.append(row)  

writeToExcel(rows, "insert_name_of_file_here.xlsx")

将readfile和writefile替换为您要读取的文件并写入