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 ಕರೆಯುವುದು ಅಥವಾ ಎಲ್ಲಾ ಸಾಲುಗಳನ್ನು ಪಟ್ಟಿಗೆ ಸಂಗ್ರಹಿಸುವುದು ಇಡೀ ವಿಷಯವನ್ನು ಮೆಮೊರಿಗೆ ಮರಳಿ ತರುತ್ತದೆ. ಸ್ಟ್ರೀಮಿಂಗ್ಗೆ ಇನ್ನೂ ಸಾಗಣೆ ಬಫರ್ಗಳು ಮತ್ತು ಪ್ರಸ್ತುತ ದಾಖಲೆಗೆ ಜಾಗ ಬೇಕು, ಅದು ಸ್ವತಃ ದೊಡ್ಡ ಕ್ಷೇತ್ರವನ್ನು ಹೊಂದಿರಬಹುದು.
ಪ್ರತಿಕ್ರಿಯೆ ಸಂದರ್ಭವು ಲೂಪ್ನಿಂದ ನಿರ್ಗಮಿಸುವಾಗ ದೇಹವನ್ನು ಮುಚ್ಚುತ್ತದೆ, ಆರಂಭಿಕ ಹೊಂದಾಣಿಕೆಯ ಸಮಯದಲ್ಲೂ. ಓದುವ ಸಮಯ ಮಿತಿಯು ಒಳಬರುವ ಡೇಟಾಗಾಗಿ ಕಾಯುವಿಕೆಯನ್ನು ಮಿತಿಗೊಳಿಸುತ್ತದೆ, ದೊಡ್ಡ ಕಡತ ವರ್ಗಾವಣೆಯ ಒಟ್ಟು ಆಯುಷ್ಯವನ್ನಲ್ಲ.