#python #pandas #csv #gspread
#питон #панды #csv #gspread
Вопрос:
Моя программа загружает csv-файл с ftp-сервера, вносит изменения в форматирование, а затем я в настоящее время застрял, пытаясь загрузить его в Google листы. У меня это работает, когда я выбираю локальный файл….
В настоящее время, когда я использую переменную writer, она говорит TypeError: '_csv.writer' object is not iterable
import paramiko import pandas as pd import csv import gspread client = paramiko.SSHClient() client.set_missing_host_key_policy(paramiko.AutoAddPolicy()) client.connect(hostname='xxx', port='xxx', username='xxxx', password='xxxx', allow_agent=False, look_for_keys=False) curFile = '' sftp = client.open_sftp() sftp.put('AJTEST2.csv', 'AJTESTFILE.csv') with sftp.open('AJTESTFILE.csv', 'rb') as fl: df = pd.read_csv(fl, sep=',') print(str(df)) sftp.close() # MAINPY new_rows = [] # a holder for our modified rows when we make them changes = { # a dictionary of changes to make, find 'key' substitue with 'value' 'vehicle_id': 'stock number', # I assume both 'key' and 'value' are strings 'vin': 'vehicle_id', } reader = csv.reader(df) # pass the file to our csv reader for row in reader: # iterate over the rows in the file new_row = row # at first, just copy the row for key, value in changes.items(): # iterate over 'changes' dictionary new_row = [x.replace(key, value) for x in new_row] # make the substitutions new_rows.append(new_row) # add the modified rows **with open('test5.csv', 'w') as f: # Overwrite the old file with the modified rows writer = csv.writer(f) writer.writerows(new_rows)** print("done!") print(str(writer)) gc = gspread.service_account( filename='xxx.json') print("Connected TO GOOGLE") **gc.import_csv("my-sheet-id", writer)** print("UPLOADED")
Я полагаю, что gspread ищет файл csv и не принимает переменные? Могу ли я использовать программу записи для записи csv-файла в локальную переменную вместо моего p? Я спрашиваю об этом, так как хочу сделать этот сервер односторонним.
Ответ №1:
Ты проходишь writer
здесь мимо:
gc.import_csv("my-sheet-id", writer)
разве вы не хотите передать «test5.csv»?
В качестве примечания, это довольно запутанно, когда в вашем коде есть случайные звезды. Вы должны удалить их перед публикацией в SO.
Комментарии:
1. Извините. Да, я могу передать файл, который он только что создал. Но я хочу, чтобы он прошел, прежде чем он будет локально записан на ПК. Таким образом, я могу разместить это на сервере