Я сталкиваюсь с проблемой при загрузке файла CSV из S3, обработке его и читая его в DataFrame Pandas. Вот ситуация: < /p>
Я загружаю файл из ковша S3 в качестве байтового потока, сохраняя его
локально, а затем читая его с Pandas. < /li>
Правильно загружается и сохраняет файл (насколько я могу судить): < /li>
Размер файла соответствует тому, что сообщается в S3. Файл сохраняется локально без ошибок. br /> Что я пробовал: < /strong> < /p>
вручную загружать и читать Файл: он работает отлично, когда я вручную загружаю файл с S3 с помощью консоли AWS и загружаю его в панды. У него даже было более миллиона рядов. Обычно он обнаруживает UTF-8, ASCII или аналогичное кодирование для байтового потока. Я также пытался вручную установить кодирование, но это тоже не сработало. В байтах от S3 в локальную память я подумал, что, возможно, что -то не так со строительством файла с использованием байтов, поэтому в качестве механизма резерва я добавил чек, который загрузил бы весь файл из S3, если подсчет строки для файла равно 0 (с подходом байта), но это было безрезультатно. Содержание файла они появляются как двоичные нули (\ x00), что кажется неправильным. ПРИМЕЧАНИЕ. При загрузке вручную и открыты с использованием Pandas. /> 9. Загруженный вручную файл отлично работает с пандами, поэтому файл в S3 не поврежден.
10. Моя текущая реализация включает в себя загрузку файла в кусках, реконструкцию его из потока, а затем сохранение его локально.
11. Несмотря на то, что следовать той же логике вручную (загрузка и сохранение), программно загруженный файл не загружает строки в панд. >s3 = boto3.client('s3', region_name='', aws_access_key_id='', aws_secret_access_key='')
< /code>
s3_bucket_name = ""
s3_file_key = "" < /p>
def Deck_and_read_file (s3_bucket, s3_key):
try: < / / p>
print(f"Downloading file: {s3_key}")
response = s3.get_object(Bucket=s3_bucket, Key=s3_key)
file_content = response['Body'].read()
local_filename = "downloaded_file.csv"
with open(local_filename, "wb") as f:
f.write(file_content)
print(f"File saved locally as {local_filename}")
# loading the file into pandas
df = pd.read_csv(local_filename, low_memory=False)
print(f"Total rows in DataFrame: {df.shape[0]}")
print(df.head())
except Exception as e:
print(f"Error: {e}")
< /code>
вызов функции < /h1>
download_and_read_file (s3_bucket_name, s3_file_key) < /p>
Абсолютно будет признана. /п>
Подробнее здесь: https://stackoverflow.com/questions/793 ... l-download
Файл CSV от S3 возвращает 0 строк при загрузке с помощью Pandas, несмотря на ручную загрузку ⇐ Python
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение