import csv
import sys
source = csv.DictReader(open('source.csv'))
export = csv.DictReader(open('export.csv'))
sys.stdout = open('output.csv','w')
val = 0
def output():
for row in source:
val = row['SKU']
for row in export:
if row['SKU'] == val:
print '"' + row['SKU'] + '"' + ',' + '"' + row['DESC'] + '"' + ',' + '"' + row['COST'] + '"' + ',' + '"' + row['MSRP'] + '"' + ',' + '"' + row['CORE'] + '"' + ',' + '"' + row['WEIGHT'] + '"' + ',' + '"' + row['HEIGHT'] + '"' + ',' + '"' + row['LENGTH'] + '"' + ',' + '"' + row['WIDTH'] + '"'
else:
continue
output()
这只获取源文件中的第一个SKU。而不是源文件中的所有15000个SKU。格式正确。由于这是建立在一个只使用导出文件中的信息进行过滤的代码上的,(没有源csv),我觉得我的问题在第二个for循环中,但是我还不太精通如何解决它。你知道吗
不能一次又一次地循环文件,因为一旦读取位置到达末尾,就不能再读取更多的文件了。您必须显式地将read位置放回0,对基础file对象使用
file.seek()
调用。但这是一个非常糟糕和缓慢的方法。你知道吗将
export
数据存储在字典中,这样您就可以在固定时间内查找匹配的SKU:现在您只需在输入CSV文件上迭代一次。我使用
csv.DictWriter()
对象生成输出,而不是打印。通过将quoting
选项设置为csv.QUOTE_ALL
,始终可以得到带引号的列。你知道吗fieldnames
参数告诉DictWriter()
要从字典中获取哪些字段(由用于读取exports CSV文件的DictReader()
生成),而extrasaction
选项定义如何处理字典中的额外键(这里我们忽略这些)。你知道吗相关问题 更多 >
编程相关推荐