Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/320.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python-在CSV之间复制列,但组合字符串/整数值复制为空?_Python_Csv_Arcpy - Fatal编程技术网

Python-在CSV之间复制列,但组合字符串/整数值复制为空?

Python-在CSV之间复制列,但组合字符串/整数值复制为空?,python,csv,arcpy,Python,Csv,Arcpy,我有一个master.txt文件,我将其转换为master.csv,使用逗号作为分隔符。我正在尝试仅将我想要的列从master.csv复制到airpair.csv。我的第一列包含A1234和CB34555等值,这些值在aircraft.csv中显示为空白。列标题“N-NUMBER”会显示,其他列中的所有数据也会显示。如何解决此问题以获取完整数据 import arcpy import csv import time time.sleep(7) arcpy.env.workspace = r"

我有一个master.txt文件,我将其转换为master.csv,使用逗号作为分隔符。我正在尝试仅将我想要的列从master.csv复制到airpair.csv。我的第一列包含A1234和CB34555等值,这些值在aircraft.csv中显示为空白。列标题“N-NUMBER”会显示,其他列中的所有数据也会显示。如何解决此问题以获取完整数据

import arcpy
import csv
import time

time.sleep(7)

arcpy.env.workspace = r"C:\GIS\final"

master = r"C:\GIS\final\MASTER.txt"
table = r"C:\GIS\final\MASTER.csv"
result = r"C:\GIS\final\aircraft.csv"
need = ["N-NUMBER", "NAME", "STREET", "STREET2", "CITY", "STATE", "ZIP CODE", "REGION", "TYPE AIRCRAFT"]
StartTime = time.clock()

in_txt = csv.reader(open(master, "rb"), delimiter = ',')
out_csv = csv.writer(open(table, 'wb'))
out_csv.writerows(in_txt)
del in_txt
del out_csv

EndTime = time.clock()
TotalTime = str(EndTime - StartTime)
print "Conversion Operation Complete in " + TotalTime + " seconds."

StartTime = time.clock()

with open(table) as infile, open(result, "wb") as outfile:
    r = csv.DictReader(infile)
    w = csv.DictWriter(outfile, need, extrasaction="ignore")
    w.writeheader()
    for row in r:
        w.writerow(row)

EndTime = time.clock()
TotalTime2 = str(EndTime - StartTime)
print "Cleaning Operation Complete in " + TotalTime2 + " seconds."

我将提出一种我认为更简单的方法来解决这个问题,而不需要使用太多python模块:

编辑:我添加了一些代码,从第一行提取“需要”标签的索引,假设第一行是标题,然后将这些索引存储在“需要”中。


在这里,您只需打开文件,读取所有数据,然后在使用“想要”指定select索引后,将想要的数据写入一个新文件。这项工作不需要太多开销

我怀疑您的
master.txt
不是CSV文件。如果是这样的话-你不必要地转换了它。。。如果它有可以解析为dict的头和列,那么使用
extracation='ignore'
的其余代码应该按计划工作。我同意Jon的观点。我在下面给出了一个答案,假设您已经创建了.csv,但您可以绕过该步骤,只在文件的默认分隔符上拆分内容。我在写入部分错误地使用了
table[idx]
而不是
row[idx]
,现在我已经修复了这个问题。我得到了基于“want=”的“ValueError:'N-NUMBER'不在列表中”线路。我将其更改为[need.index(x)for x in need],但尽管脚本运行,但这并没有重现确切的列表。显然,您建议的方式引用了列表“需要”,但在标题列表中找不到N号?我不明白为什么,因为N-NUMBER是.txt文件包含的第一个内容。@christopheddow您可以检查文件的第一行是否包含“需要”中的列标签吗?我假设文件的第一行包含一组以“,”分隔的标签,它们的格式与“需要”中的格式完全相同。第一行包含大约25个标题,以N号、序列号、MFR型号代码开始。。。。并包含“需要”列表中的所有需求。我只想保存“需要”列表中的那些列,而忽略其他列。N-NUMBER是整个.txt文件中的第一项,因此它肯定在那里。它的工作方式是,如果你有一个
头=['a','b','c','d']
need=['a','c']
那么
想要=[header.index(x)for x in need]
将返回
[0,2]
但这是假设您的格式与您描述的相同。
need      = ["N-NUMBER", "NAME", "STREET", "STREET2", "CITY", "STATE", "ZIP CODE", "REGION", "TYPE AIRCRAFT"]


with open(infile, 'r') as f:
    header    = f.readline().split(',')  # read and split the header
    wanted    = [header.index(x) for x in need]  # get the indices you want out of the header
    rows      = f.readlines()  # creates list of each row as a string
    table     = [r.split(',') for r in rows]  # splits each row on the ','

with open(outfile, 'w') as o:
    o.write(','.join(header) + '\n')  # re-join the split header, write it
    for row in table:
        out_string = ','.join([row[idx] for idx in wanted]) + '\n'
        o.write(out_string)  # write a new csv with the columns specified in "wanted"