ສະຕຣີມບັນທຶກ CSV ຫຼາຍແຖວດ້ວຍ Python Requests ແລະ csv.reader
ສະຕຣີມການຕອບສະໜອງຜ່ານພຣັອກຊີເຂົ້າ csv.reader ແລະ ຮັກສາຂອບເຂດຂອງບັນທຶກ ແທນທີ່ຈະແບ່ງແຕ່ລະແຖວທາງກາຍຢູ່ຕົວແຍກ.
stream=True ເຮັດໃຫ້ການປະມວນຜົນເລີ່ມຕົ້ນໄດ້ກ່ອນທີ່ຕົວການຕອບສະໜອງຜ່ານພຣັອກຊີຈະຖືກດາວໂຫຼດຄົບ. ສຳລັບ CSV, ສົ່ງຕົວຊ້ຳແຖວຂໍ້ຄວາມໃຫ້ csv.reader ເພື່ອໃຫ້ຕົວແຍກພາຍໃນເຄື່ອງໝາຍອ້າງ ແລະ ບັນທຶກຫຼາຍແຖວຍັງເປັນຂໍ້ມູນ CSV.
ສຳລັບໄຟລ໌ UTF-8 ຕົວຢ່າງທີ່ໃຊ້ເຄື່ອງໝາຍອັດຕະພາກ:
import csv
import requests
routes = {'https': 'http://proxy.example:8080'}
with requests.get(
'https://data.example/observations.csv',
proxies=routes,
stream=True,
timeout=(5, 30),
) as response:
response.raise_for_status()
response.encoding = 'utf-8'
lines = (
line + '\n'
for line in response.iter_lines(
chunk_size=65536, decode_unicode=True)
)
for record in csv.reader(lines, delimiter=';'):
if record and record[0] == 'wanted':
print(record)
break
ເລືອກການເຂົ້າລະຫັດ ແລະ ພາສາຖິ່ນຕົວຈິງຂອງໄຟລ໌. ສຳລັບການດາວໂຫຼດ CSV ສາທາລະນະຜ່ານເສັ້ນທາງພຣັອກຊີສາທາລະນະທີ່ອະນຸຍາດ, ລາຍຊື່ພຣັອກຊີ HTTP ສະເໜີຜູ້ສະໝັກສຳລັບ URL routes. ເວີຊັນນີ້ເຮັດໃຫ້ຈຸດສິ້ນສຸດແຖວທາງກາຍເປັນ LF: iter_lines ລຶບພວກມັນອອກ, ແລະ ຕົວສ້າງເພີ່ມແຖວໃໝ່ຄືນສຳລັບຕົວແຍກ CSV. ສິ່ງນີ້ສຳຄັນເມື່ອຊ່ອງຂໍ້ມູນໃນເຄື່ອງໝາຍອ້າງຕໍ່ໄປອີກແຖວທາງກາຍ.
ສຳລັບຂະບວນວຽກທີ່ຕ້ອງການຮັກສາຕົວອັກສອນ CRLF ທີ່ຝັງຢູ່ໃຫ້ຖືກຕ້ອງລະດັບໄບຕ໌, ໃຫ້ໃຊ້ການຈັດຫໍ່ຂໍ້ຄວາມແບບສະຕຣີມທີ່ຮັກສາຈຸດສິ້ນສຸດແຖວເຫຼົ່ານັ້ນ. ການເຮັດເປັນມາດຕະຖານໂດຍເຈດຕະນາໃນຕົວຢ່າງເໝາະສຳລັບການປະມວນຜົນແບບເນັ້ນບັນທຶກ ທີ່ LF ເປັນການແທນຄວາມທີ່ຕ້ອງການ.
ໜຶ່ງການຕອບສະໜອງ, ຫຼາຍການອ່ານ
ຕົວຊ້ຳໃຊ້ສ່ວນຕ່າງໆຈາກການຕອບສະໜອງ HTTP ອັນດຽວ. ມັນບໍ່ສົ່ງຄຳຮ້ອງຂໍໃໝ່ສຳລັບແຕ່ລະແຖວ. ຄຳຮ້ອງຂໍ HTTP Range ເປັນກົນໄກອື່ນ ແລະ ບໍ່ລະບຸຂອບເຂດບັນທຶກ CSV ໂດຍທຳມະຊາດ.
ການເອີ້ນ response.text ຫຼື ການເກັບທຸກແຖວໃສ່ລາຍການຈະນຳເນື້ອຫາທັງໝົດກັບຄືນສູ່ໜ່ວຍຄວາມຈຳ. ການສະຕຣີມຍັງຕ້ອງການບ່ອນສຳລັບບັຟເຟີຂົນສົ່ງ ແລະ ບັນທຶກປັດຈຸບັນ ເຊິ່ງຕົວມັນເອງອາດມີຊ່ອງຂໍ້ມູນໃຫຍ່.
ບໍລິບົດຂອງການຕອບສະໜອງປິດຕົວເມື່ອອອກຈາກວົງຈອນ ລວມທັງເມື່ອພົບການຈັບຄູ່ໄວ. ເວລາຈຳກັດການອ່ານຈຳກັດການລໍຖ້າຂໍ້ມູນຂາເຂົ້າ ບໍ່ແມ່ນອາຍຸທັງໝົດຂອງການໂອນໄຟລ໌ໃຫຍ່.