-1
typeError with csv file in python3 csvファイルにデータを書き込み、編集するPython3プログラムを作成しようとしましたが、 'str 'ではなくバイトのようなオブジェクトが必要です 端末の出力のスクリーンショットが添付されています。これは何を意味し、何が間違っているのか分かりません。誰かが私の修正を助けます。コードは以下の通りです:python3プログラムでcsvファイルを操作すると、 "TypeError: 'str'ではなくバイト型オブジェクトが必要です。
import csv
import datetime
import shutil
from tempfile import NamedTemporaryFile
def get_length(file_path):
with open("data.csv", "r") as csvfile:
#some csv file data.csv is created in the same directory
reader = csv.reader(csvfile)
reader_list = list(reader)
return len(reader_list)
def append_data(file_path, name, email, amount):
fieldnames = ['id', 'name', 'email', 'amount', 'sent', 'date']
#the number of rows?
next_id = get_length(file_path)
with open(file_path, "a") as csvfile:
writer = csv.DictWriter(csvfile, fieldnames=fieldnames)
writer.writerow({
"id": next_id,
"name": name,
"email": email,
"sent": "",
"amount": amount,
"date": datetime.datetime.now()
})
#append_data("data.csv", "some name", "[email protected]", 123.456)
def edit_data(edit_id=None, email=None, amount=None, sent=None):
filename = "data.csv"
temp_file = NamedTemporaryFile(delete=False)
with open(filename, "rb") as csvfile, temp_file:
reader = csv.DictReader(csvfile)
fieldnames = ['id', 'name', 'email', 'amount', 'sent', 'date']
writer = csv.DictWriter(temp_file, fieldnames=fieldnames)
writer.writeheader()
for row in reader:
#print(row['id'] == 4)
if edit_id is not None:
if int(row['id']) == int(edit_id):
row['amount'] = amount
row['sent'] = sent
elif email is not None and edit_id is None:
if str(row['email']) == str(email):
row['amount'] = amount
row['sent'] = sent
else:
pass
writer.writerow(row)
shutil.move(temp_file.name, filename)
return True
return False
edit_data(8、9992.32、 "")(「= '10' 送られ、量= 19.90、email='[email protected])
edit_data
のPython 3では、あなたのファイル '開いて開く必要があります' csv'のリーダーやライター使用する場合( "data.csv"、 "R" を、改行= "") '。 'rb'を使うことはPython 2.xとのみ互換です。 –