[Xin lưu ý rằng đây là một câu hỏi khác nhau từ đã trả lời How to replace a column using Python’s built-in .csv writer module?]Viết với Python tích hợp trong mô-đun .csv
tôi cần phải làm một tìm và thay thế (cụ thể cho một cột URL) trong một khổng lồ Tệp .csv của Excel. Kể từ khi tôi đang ở giai đoạn đầu của việc cố gắng để dạy cho mình một ngôn ngữ kịch bản, tôi figured tôi muốn cố gắng thực hiện các giải pháp trong python.
Tôi gặp sự cố khi cố gắng ghi lại tệp .csv sau khi thực hiện thay đổi đối với nội dung của mục nhập. Tôi đã đọc official csv module documentation về cách sử dụng tác giả, nhưng không có ví dụ nào đề cập đến trường hợp này. Cụ thể, tôi đang cố gắng để có được các hoạt động đọc, thay thế và viết hoàn thành trong một vòng lặp. Tuy nhiên, người ta không thể sử dụng cùng một tham chiếu 'hàng' trong cả đối số của vòng lặp for và làm tham số cho writer.writerow(). Vì vậy, một khi tôi đã thực hiện thay đổi trong vòng lặp for, làm thế nào tôi nên viết lại cho tập tin?
chỉnh sửa: tôi thực hiện những gợi ý từ S. Lott và Jimmy, vẫn cùng một kết quả
chỉnh sửa # 2: tôi thêm "rb" và "wb" vào open() chức năng, theo đề nghị S. Lott của
import csv
#filename = 'C:/Documents and Settings/username/My Documents/PALTemplateData.xls'
csvfile = open("PALTemplateData.csv","rb")
csvout = open("PALTemplateDataOUT.csv","wb")
reader = csv.reader(csvfile)
writer = csv.writer(csvout)
changed = 0;
for row in reader:
row[-1] = row[-1].replace('/?', '?')
writer.writerow(row) #this is the line that's causing issues
changed=changed+1
print('Total URLs changed:', changed)
chỉnh sửa: Đối với các bạn tham khảo, đây là mới traceback đầy đủ từ người phiên dịch:
Traceback (most recent call last):
File "C:\Documents and Settings\g41092\My Documents\palScript.py", line 13, in <module>
for row in reader:
_csv.Error: iterator should return strings, not bytes (did you open the file in text mode?)
Được rồi, tôi cũng lo vấn đề đó. Có vẻ như chúng ta đang tiến gần hơn ... Traceback trở nên ngắn hơn :) – ignorantslut
Bây giờ tôi nghĩ về nó, tuy nhiên, trước khi tôi cố gắng viết lại tập tin (tức là, khi tôi vẫn đang tìm kiếm cột bên phải trong .csv), tập lệnh hoạt động tốt mà không có rb. – ignorantslut
"Các" rb "và" wb "là hoàn toàn bắt buộc.": Không có trong Python 3. Ở đó, bạn nên gọi open() với newline = ''. – Miles