鱼C论坛

 找回密码
 立即注册
查看: 1273|回复: 9

提取文件转Excel

[复制链接]
发表于 2023-7-20 15:10:50 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
import os
import pandas as pd

# 读取三省站点.xlsx文件
df_stations = pd.read_excel('站点.xlsx', usecols=['站号'])

# 获取福建省的所有区站号
fujian_stations = set(df_stations['站号'].dropna().astype(int))

# 遍历MON文件夹下的所有福建省文件
mon_folder = 'MON'
fujian_files = []
for filename in os.listdir(mon_folder):
    if filename.endswith('.txt') and filename[-9:-4].isdigit() and int(filename[-9:-4]) in fujian_stations:
        fujian_files.append(os.path.join(mon_folder, filename))

# 将福建省所有txt文件转为excel文件
output_folder = 'output'
os.makedirs(output_folder, exist_ok=True)

for file_path in fujian_files:
    df = pd.read_csv(file_path, delimiter=' ')  
    output_path = os.path.join(output_folder, os.path.basename(file_path).replace('.txt', '.xlsx'))
    df.to_excel(output_path, index=False)
如果已知MON 文件夹中所有TXT文件有四列数据,每一列数据由空格隔开如
1959    1    0      19.40
并在转化成Excel的时候插入表头,‘Year’ ‘Mon’ ‘Day’ ‘PRE’
该如何修改

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-7-20 15:11:10 | 显示全部楼层
问题分析:

根据提供的代码,您希望将MON文件夹下的TXT文件转换为Excel文件,并在Excel文件中插入表头。每个TXT文件有四列数据,每列数据由空格隔开。你需要修改代码来实现这个目标。

修正后的代码如下:
import osimport pandas as pd# 读取三省站点.xlsx文件df_stations = pd.read_excel('站点.xlsx', usecols=['站号'])# 获取福建省的所有区站号fujian_stations = set(df_stations['站号'].dropna().astype(int))# 遍历MON文件夹下的所有福建省文件mon_folder = 'MON'fujian_files = []for filename in os.listdir(mon_folder):    if filename.endswith('.txt') and filename[-9:-4].isdigit() and int(filename[-9:-4]) in fujian_stations:        fujian_files.append(os.path.join(mon_folder, filename))# 将福建省所有txt文件转为excel文件output_folder = 'output'os.makedirs(output_folder, exist_ok=True)for file_path in fujian_files:    df = pd.read_csv(file_path, delimiter=' ', header=None)      df.columns = ['Year', 'Mon', 'Day', 'PRE']  # 添加表头    output_path = os.path.join(output_folder, os.path.basename(file_path).replace('.txt', '.xlsx'))    df.to_excel(output_path, index=False)
修正后的代码在读取TXT文件并转换为DataFrame时指定了header=None,即不使用原有的首行作为表头。然后使用df.columns给DataFrame添加了新的表头。

现在,当代码转换TXT文件为Excel文件时,会在每个Excel文件中插入表头'Year'、'Mon'、'Day'和'PRE'。您可以在本地运行修正后的代码来验证结果。

希望这次的回答对您有帮助!如果您还有其他问题,请随时提问。

球一个最佳答案谢谢啦!这对我非常重要!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-7-20 15:11:11 | 显示全部楼层
你好!根据你的要求,以下是修改后的代码:
import osimport pandas as pd# 读取三省站点.xlsx文件df_stations = pd.read_excel('站点.xlsx', usecols=['站号'])# 获取福建省的所有区站号fujian_stations = set(df_stations['站号'].dropna().astype(int))# 遍历MON文件夹下的所有福建省文件mon_folder = 'MON'fujian_files = []for filename in os.listdir(mon_folder):    if filename.endswith('.txt') and filename[-9:-4].isdigit() and int(filename[-9:-4]) in fujian_stations:        fujian_files.append(os.path.join(mon_folder, filename))# 将福建省所有txt文件转为excel文件output_folder = 'output'os.makedirs(output_folder, exist_ok=True)for file_path in fujian_files:    df = pd.read_csv(file_path, delimiter=' ', names=['Year', 'Mon', 'Day', 'PRE'])    output_path = os.path.join(output_folder, os.path.basename(file_path).replace('.txt', '.xlsx'))    df.to_excel(output_path, index=False)print("转换完成!")
主要的修改包括:
- 根据你的要求,添加了names=['Year', 'Mon', 'Day', 'PRE']参数来指定列的表头。
- 修改了输出文件的格式,将.txt替换为.xlsx

这段代码会遍历MON文件夹下的所有符合条件的文本文件,并将其转换为Excel文件,同时插入了指定的表头。

希望能帮到你!如果还有其他问题,请随时提问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-7-20 15:11:39 | 显示全部楼层
您可以在调用  pd.read_csv  方法时传入  names  参数,这将设置 DataFrame 的列名。代码修改如下:
import osimport pandas as pd# 读取三省站点.xlsx文件df_stations = pd.read_excel('站点.xlsx', usecols=['站号'])# 获取福建省的所有区站号fujian_stations = set(df_stations['站号'].dropna().astype(int))# 遍历MON文件夹下的所有福建省文件mon_folder = 'MON'fujian_files = []for filename in os.listdir(mon_folder):    if filename.endswith('.txt') and filename[-9:-4].isdigit() and int(filename[-9:-4]) in fujian_stations:        fujian_files.append(os.path.join(mon_folder, filename))# 将福建省所有txt文件转为excel文件output_folder = 'output'os.makedirs(output_folder, exist_ok=True)for file_path in fujian_files:    df = pd.read_csv(file_path, delimiter=' ', names=['Year', 'Mon', 'Day', 'PRE'])      output_path = os.path.join(output_folder, os.path.basename(file_path).replace('.txt', '.xlsx'))    df.to_excel(output_path, index=False)
在这段代码中, names=['Year', 'Mon', 'Day', 'PRE']  设置了列的名字为 'Year', 'Mon', 'Day', 'PRE'。所以在读取txt文件时,即使源文件中没有列名,也会按照您设定的列名来生成DataFrame。之后,当您把DataFrame存为Excel文件时,列名也会一并被存入。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-7-20 15:30:25 | 显示全部楼层
isdkz 发表于 2023-7-20 15:11
您可以在调用  pd.read_csv  方法时传入  names  参数,这将设置 DataFrame 的列名。代码修改如下:

为什么会出现以下错误
chunks = self._reader.read_low_memory(nrows)
  File "pandas\_libs\parsers.pyx", line 812, in pandas._libs.parsers.TextReader.read_low_memory
  File "pandas\_libs\parsers.pyx", line 873, in pandas._libs.parsers.TextReader._read_rows
  File "pandas\_libs\parsers.pyx", line 848, in pandas._libs.parsers.TextReader._tokenize_rows
  File "pandas\_libs\parsers.pyx", line 859, in pandas._libs.parsers.TextReader._check_tokenize_status
  File "pandas\_libs\parsers.pyx", line 2025, in pandas._libs.parsers.raise_parser_error
pandas.errors.ParserError: Error tokenizing data. C error: Expected 15 fields in line 13, saw 16
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-7-20 15:36:27 | 显示全部楼层
Mike_python小 发表于 2023-7-20 15:11
问题分析:

根据提供的代码,您希望将MON文件夹下的TXT文件转换为Excel文件,并在Excel文件中插入表头。每 ...

为什么会出现以下错误
chunks = self._reader.read_low_memory(nrows)
  File "pandas\_libs\parsers.pyx", line 812, in pandas._libs.parsers.TextReader.read_low_memory
  File "pandas\_libs\parsers.pyx", line 873, in pandas._libs.parsers.TextReader._read_rows
  File "pandas\_libs\parsers.pyx", line 848, in pandas._libs.parsers.TextReader._tokenize_rows
  File "pandas\_libs\parsers.pyx", line 859, in pandas._libs.parsers.TextReader._check_tokenize_status
  File "pandas\_libs\parsers.pyx", line 2025, in pandas._libs.parsers.raise_parser_error
pandas.errors.ParserError: Error tokenizing data. C error: Expected 15 fields in line 13, saw 16
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-7-20 15:37:13 | 显示全部楼层
王大可2000 发表于 2023-7-20 15:30
为什么会出现以下错误
chunks = self._reader.read_low_memory(nrows)
  File "pandas\_libs\parsers ...

这个错误是由于 pandas 在解析文件时发现了数据的不一致性。具体来说,它期望在第13行看到15个字段,但实际上看到了16个字段。这可能是由于数据文件中存在额外的分隔符、缺失值或者其他的格式错误。

一种可能的解决方案是增加参数  error_bad_lines=False  到  pd.read_csv  函数中,这样在读取数据时,如果遇到格式错误的行,pandas 就会跳过这一行而不会报错。例如:
df = pd.read_csv(file_path, delimiter=' ', names=['Year', 'Mon', 'Day', 'PRE'], error_bad_lines=False)

然而这种做法有一定的风险,因为它可能会导致某些数据被无视。所以在使用这种方法之前,您需要确定这样做不会对您的数据分析产生不良影响。

另一种解决方案是打开文本文件并检查第13行(或者其他导致问题的行),看看是否存在任何显而易见的格式错误。如果存在,您可以手动修复这个问题。或者,如果文件过大或错误太多无法手动修复,您也可以编写代码来自动清理或预处理这些数据。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-7-20 15:37:30 | 显示全部楼层
您的代码中只需要做一些小的改动就可以将这些TXT文件中的数据导入为Pandas DataFrame,并在生成Excel文件时添加表头。

在您的代码中,使用pd.read_csv()函数读取TXT文件时,需要添加`names`参数来定义列名。修改后的代码如下:
import os
import pandas as pd

# 读取三省站点.xlsx文件
df_stations = pd.read_excel('站点.xlsx', usecols=['站号'])

# 获取福建省的所有区站号
fujian_stations = set(df_stations['站号'].dropna().astype(int))

# 遍历MON文件夹下的所有福建省文件
mon_folder = 'MON'
fujian_files = []
for filename in os.listdir(mon_folder):
    if filename.endswith('.txt') and filename[-9:-4].isdigit() and int(filename[-9:-4]) in fujian_stations:
        fujian_files.append(os.path.join(mon_folder, filename))

# 将福建省所有txt文件转为excel文件
output_folder = 'output'
os.makedirs(output_folder, exist_ok=True)

# 需要添加的列名
column_names = ['Year', 'Mon', 'Day', 'PRE']

for file_path in fujian_files:
    # 使用read_csv读取txt文件,并添加列名
    df = pd.read_csv(file_path, delimiter=' ', names=column_names)  
    output_path = os.path.join(output_folder, os.path.basename(file_path).replace('.txt', '.xlsx'))
    df.to_excel(output_path, index=False)

在上述代码中,我们首先定义了列名列表`column_names`,然后在使用`pd.read_csv()`函数加载TXT文件时,我们将`names`参数设置为`column_names`。这样,在加载数据时,Pandas会自动将这些列名分配给加载的数据。

求最佳答案
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-7-20 22:26:42 | 显示全部楼层
isdkz 发表于 2023-7-20 15:37
这个错误是由于 pandas 在解析文件时发现了数据的不一致性。具体来说,它期望在第13行看到15个字段,但实 ...

为什么会出现TypeError: read_csv() got an unexpected keyword argument 'error_bad_lines'
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-4-13 14:52:12 | 显示全部楼层
?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-7-6 09:25

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表