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 шақыру немесе барлық жолды тізімге жинау бүкіл мазмұнды жадыға қайта әкеледі. Ағындық өңдеуге әлі де тасымалдау буферлері мен ағымдағы жазба үшін орын қажет, оның өзінде үлкен өріс болуы мүмкін.
Жауап контексті циклден шыққанда денені жабады, оның ішінде ерте сәйкестік кезінде де. Оқу уақыты кіріс деректерін күтуді шектейді, үлкен файл тасымалының жалпы ұзақтығын емес.