为什么打印和导出到.csv文件时输出不同?

  • 本文关键字:文件 输出 csv 打印 python csv
  • 更新时间 :
  • 英文 :


当我在脚本1print(test.dataScraper(merchantID, productID))中运行此命令时,它会打印多个值。

而当我导出到。csv

df = pd.DataFrame(script2.dataScraper(merchantID, productID))
df.to_csv("plsWork.csv")

它只打印最后一个值,而不是全部。

脚本1

import script2
with open('productID.csv', 'r') as csv_file:
csv_reader = csv.reader(csv_file)
next(csv_reader)
for line in csv_reader:
merchantID = (line[2])
productID = (line[4])
if len(productID) == 0:
break
df = pd.DataFrame(script2.dataScraper(merchantID, productID))
df.to_csv("plsWork.csv")
#print(test.dataScraper(merchantID, productID))

脚本2

def dataScraper(merchantID, productID):
## Product Information
data_dict['Product ID'] = data['data']['id']
data_dict['Product Name'] = data['data']['name']
data_dict['Product Size'] = bottleSize
data_dict['Product Option ID'] = optionID
data_dict['Quantity In Stock'] = availableQuantity
master_list.append(data_dict)
if size == 0:
break
return(master_list)

解析你的代码有点困难,因为它不是一个最小的可重复的例子,但是你有一些明显的问题:

  • dataScraper接受两个变量,并且不使用它们。相反,您依赖于一些不是函数的局部变量。
  • dataScraper连续覆盖非局部变量data_dict
  • dataScraper返回一个None值或现在修改的数组。
  • 但是你的主要问题可能是你正在为for line in csv_reader节的每个循环写to_csv。如果你的master_list在每个循环中被重新创建,那么它只会有你在其中处理的最后一个值,因为to_csv函数不是追加的,它是覆盖的。

为了至少隔离您的问题,您应该让您的函数只使用局部变量。比如:

def process_file(file_to_read: str, output_file: str) -> None:
with open(file_to_read, 'r') as csv_file:
csv_reader = csv.reader(csv_file)
next(csv_reader)  # Skip column headers

processed_dicts = [ scrape_data(line[2], line[4]) for line in csv_reader ]
pprint(processed_dict)  # Just to prove to ourselves it's correct, comment out for prod
df = pd.DataFrame(processed_dicts)
df.t0_csv(output_file)
def scrape_data(merchant_id, product_id) -> dict:
data = ...?  # Either this should be passed in as a param or fetched from somewhere.
processed_dict = {
'Product Id': data['data']['id'],
... # all your other things
}
return processed_dict

正如您所看到的,data所在的位置有一个大洞,但是这个结构应该可以约束您的问题。记住:全局变量不是你的朋友!

(另外,作为题外话,您应该真正使用习惯的Python蛇形大小写作为变量名,即scrape_data而不是scrapeData。)

相关内容

  • 没有找到相关文章

最新更新