pandas 将列导出为.csv:避免15位以上单元格中的四个零

fdbelqdn  于 2023-05-27  发布在  其他
关注(0)|答案(1)|浏览(187)

首先,我是Python和编程世界的新手,我需要你的帮助。

问题:将HTML文件的特定列中的原始数字保留在.csv文件中。

我目前正在运行一个脚本,它从HTML文件中识别游戏提供商和网站,并将信息导出为.csv文件。“ROUND_ID”列必须保留与原始文件中完全相同的数字,因为它是以Excel格式提供给我们的专业团队的。
不幸的是,Excel在数字的末尾追加了四个零,甚至将正确的最后四位数字更改为零。作为一个临时的解决方法,我设法在每个单元格的开头添加了一个“,以保持所需的格式。但是,我正在积极寻求一种永久的解决方案,可以检索原始号码,而不需要任何修改。
我试图运行一个脚本,将列转换为文本,但它似乎不工作。有什么建议吗?
代码如下:

import csv
from bs4 import BeautifulSoup
import pandas as pd
import os

# Set the directory path containing the HTML files
directory = 'C:/Users/gusta/Downloads/HTML/'

# Create an empty list to store the extracted data
filtered_data = []

# Step 1: Loop through each HTML file in the directory
for filename in os.listdir(directory):
    if filename.endswith('.html'):
        # Read the HTML file
        file_path = os.path.join(directory, filename)
        with open(file_path, 'r') as file:
            html_content = file.read()

        # Parsing the HTML content
        soup = BeautifulSoup(html_content, 'html.parser')

        # Filtering the data
        data_rows = soup.find_all('tr')  # Find all table rows
        for row in data_rows[1:]:  # Skip the header row
            cells = row.find_all('td')

            # Handle variations in table structure
            if len(cells) >= 13:
                trader_id = cells[3].text.strip()  # Extract trader ID from the fourth column
                name = cells[5].text.strip()  # Extract name from the sixth column

                # Apply desired filters (e.g., trader ID and name)
                if trader_id == '513' and name == 'PG Soft':
                    # Extract other required columns here
                    collected_data = [
                        cells[0].text.strip(),
                        cells[1].text.strip(),
                        cells[2].text.strip(),
                        trader_id,
                        cells[4].text.strip(),
                        name,
                        cells[6].text.strip(),
                        cells[7].text.strip(),
                        cells[8].text.strip(),
                        cells[9].text.strip(),
                        cells[10].text.strip(),
                        cells[11].text.strip(),
                        cells[12].text.strip()
                    ]
                    # Convert ROUND_ID to a string surrounded by quotes
                    collected_data[7] = f'"{collected_data[7]}"'

                    # Append the collected_data list to filtered_data
                    filtered_data.append(collected_data)
            else:
                print("Unexpected table structure. Skipping row...")

# Generating a single DataFrame from all the extracted data
df = pd.DataFrame(filtered_data, columns=[
    'CUSTOMER_BET_ID',
    'CUSTOMER_CODE',
    'USERNAME',
    'TRADER_ID',
    'TRADER_NAME',
    'NAME',
    'UID_',
    'ROUND_ID',
    'PLAYED_DATE',
    'S',
    'CSN_GAME_ID',
    'PLAYED_AMOUNT_FROM_BALANCE',
    'GAME_NAME'
])

# Save the DataFrame to a single CSV file with a semicolon (;) as the delimiter
output_file = 'output.csv'
df.to_csv(output_file, index=False, quoting=csv.QUOTE_NONNUMERIC, quotechar='"', sep=';')
print(f'Data extraction and spreadsheet generation completed. Output saved to {output_file}.')
type here
  • 我尝试在ID之前和之后添加“-它可以作为一种解决方案,但是,提供商仍然需要复制数字并自行删除”。
  • 尝试将列格式化为文本,但脚本不起作用。
9q78igpj

9q78igpj1#

... = f'"{collected_data[7]}"'

这是迷人的,但最终无效,因为excel只是忽略了你的努力。
如果要将具有19位ID(如1660382709472047104)的.csv导入到excel中,则无法使其看起来像number
考虑将这些ID转换为带有字符串前缀的ID,例如"X",excel不会破坏它:

... = f'X{collected_data[7]}'

一旦值脱离不忠实的excel组件的控制,您可以稍后在数据处理管道中剥离前缀。

相关问题