Hãy xem xét mã python sau
với open(sys.argv[2], 'r') là vây, \
open(sys.argv[3], 'w') dưới dạng fout:
reader = csv.DictReader(fin, delimiter='%s' % sys.argv[4])
writer = csv.DictWriter(fout, reader.fieldnames, address='excel')
nhà văn.writeheader()
nhà văn.writerows(người đọc)
Giả sử chúng ta có một tệp lớn khoảng 2GB làm đầu vào và hệ thống của chúng ta chỉ có RAM 512 MB, điều này có thể gây ra lỗi Sử dụng bộ nhớ
Có cách nào để làm cho mã của tôi sử dụng dung lượng ổ đĩa thay vì RAM, ngay cả khi điều đó sẽ chậm hơn không? Hay đây là sự cố hệ điều hành và cần bổ sung thêm trao đổi?
gia hạn
Đoạn mã trên chỉ là một ví dụ
Hãy xem xét ví dụ này
với io.open(sys.argv[2], 'r',coding='utf8',error='ignore') là vây, \
io.open(sys.argv[3], 'w',coding='utf8',error='ignore') là lỗi:
row = csv.DictReader(fin, delimiter='%s' % sys.argv[4])
fout.write(json.dumps(list(rows), indent=4))
khi sử dụngjson.dumps
, bạn luôn cần ghi dữ liệu một lần, nếu muốn nối thêm tệp, bạn phải đọc tệp và nối dữ liệu rồi ghi vào tệp, đại loại như thế này
dữ liệu = readjson(jsonfile)
data.append(newentry)
jsonfile.write(json.dumps(dữ liệu))
Cập nhật 2 bằng cách sử dụng máy phát điện (tiến hóa lười biếng)
Tôi có ý tưởng này nhưng tôi không chắc liệu nó có tạo nên sự khác biệt hay không
gen def (danh sách):
cho e trong danh sách:
năng suất e
với open(sys.argv[2], 'r') là vây, \
open(sys.argv[3], 'w') dưới dạng fout:
reader = csv.DictReader(fin, delimiter='%s' % sys.argv[4])
writer = csv.DictWriter(fout, reader.fieldnames, address='excel')
nhà văn.writeheader()
writer.writerows(gen(reader))
với open(sys.argv[2], 'r') là vây, \
open(sys.argv[3], 'w') dưới dạng fout:
row = csv.DictReader(fin, delimiter='%s' % sys.argv[4])
# fout.write(json.dumps(gen(rows), indent=4)) -> gây ra lỗi không thể tuần tự hóa JSON
fout.write(json.dumps(gen(list(rows)), indent=4))
khi sử dụng json.dumps bạn luôn cần ghi dữ liệu cùng một lúc
Không đúng sự thật. Bạn thực sự nên áp dụng phương pháp truyền phát dữ liệu lớn. Trong trường hợp này, một cái gì đó như:
fout.write('[')
đối với ii, hàng trong liệt kê(hàng):
nếu ii != 0:
fout.write(',\n')
json.dump(hàng, fout, thụt lề=4)
fout.write(']')
Bằng cách này bạn có thể viết từng hàng một và cũng lưu lại tất cả 行
Đưa vào những gì bạn không cần danh sách
chi phí chung.
Tôi là một lập trình viên xuất sắc, rất giỏi!