Python Requests болон csv.reader-ээр олон мөрт CSV бичлэгийг урсгалаар боловсруулах
Проксигоор дамжсан хариуг 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-ийг дуудах эсвэл бүх мөрийг жагсаалтад цуглуулах нь бүх агуулгыг санах ой руу буцааж авчрах болно. Урсгалах нь тээврийн буфер болон одоогийн бичлэгт зай шаардлагатай хэвээр, бичлэг өөрөө том талбар агуулж болно.
Хариуны контекст давталтаас гарахад их биеийг хаана, эрт тохиолдолд ч мөн адил. Унших хугацааны хязгаар нь ирж буй өгөгдлийг хүлээхийг хязгаарладаг бөгөөд том файл дамжуулалтын нийт хугацааг биш.