ផ្សាយស្ទ្រីមកំណត់ត្រា 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 ឬការប្រមូលជួរទាំងអស់ចូលក្នុងបញ្ជីនឹងនាំខ្លឹមសារទាំងមូលត្រឡប់ទៅអង្គចងចាំវិញ។ ការផ្សាយស្ទ្រីមនៅតែត្រូវការកន្លែងសម្រាប់ប្រណីតាងដឹកជញ្ជូន និងកំណត់ត្រាបច្ចុប្បន្ន ដែលខ្លួនឯងអាចផ្ទុកវាលធំមួយ។
បរិបទការឆ្លើយតបបិទតួនៅពេលរង្វិលជុំចេញ រួមទាំងពេលផ្គូផ្គងឆាប់រហ័ស។ ពេលវេលាអានកំណត់ការរង់ចាំទិន្នន័យចូល មិនមែនអាយុកាលសរុបនៃការផ្ទេរឯកសារធំទេ។