მრავალსტრიქონიანი 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 პროქსების სია გვთავაზობს კანდიდატებს routes URL-ისთვის. ეს ვერსია ნორმალიზებს ფიზიკურ სტრიქონთა დაბოლოებებს LF-ად: iter_lines შლის მათ, ხოლო გენერატორი უკან ამატებს ახალ სტრიქონს CSV პარსერისთვის. ეს მნიშვნელოვანია, როცა ბრჭყალებში მოთავსებული ველი სხვა ფიზიკურ სტრიქონზე გრძელდება.
სამუშაო ნაკადებისთვის, რომლებიც მოითხოვენ ჩაშენებული CRLF სიმბოლოების ბაიტობრივ ზუსტ შენარჩუნებას, გამოიყენეთ ნაკადური ტექსტური გარსაცმის კონსტრუქცია, რომელიც ინარჩუნებს ამ დაბოლოებებს. მაგალითის განზრახ ნორმალიზაცია შესაფერისია ჩანაწერებზე ორიენტირებული დამუშავებისთვის, სადაც LF არის განზრახული წარმოდგენა.
ერთი პასუხი, მრავალი წაკითხვა
იტერატორი მოიხმარს ერთი HTTP პასუხის ნაწილებს. ის არ აგზავნის ახალ მოთხოვნას ყოველი სტრიქონისთვის. HTTP Range მოთხოვნები სხვა მექანიზმია და ბუნებრივად არ განსაზღვრავს CSV ჩანაწერების საზღვრებს.
response.text-ის გამოძახება ან ყველა მწკრივის სიაში შეგროვება მთელ შიგთავსს დააბრუნებს მეხსიერებაში. ნაკადურ დამუშავებას მაინც სჭირდება ადგილი ტრანსპორტის ბუფერებისა და მიმდინარე ჩანაწერისთვის, რომელიც თავად შეიძლება შეიცავდეს დიდ ველს.
პასუხის კონტექსტი ხურავს სხეულს ციკლიდან გასვლისას, მათ შორის ადრეული დამთხვევისას. კითხვის ვადა ზღუდავს შემომავალი მონაცემების ლოდინს და არა დიდი ფაილის გადაცემის საერთო ხანგრძლივობას.