f = zipfile.ZipFile(f"E:\ADFG\ADFG\ADFG2.rar", 'r') # 压缩文件位置 for file in f.namelist(): f.extract(file, "E:ADFGxADFGx") # 解压位置 f.close() # 指定要查找的文件夹路径 folder_path = "E:\ADFG\ADFG" # 指定要选取的字段 selected_columns = ['HHHHH', 'GDGGD'] # 使用 os 模块列出文件夹中所有的 XLS 文件 xls_files = [f for f in os.listdir(folder_path) if f.endswith('.xls')] # 创建一个新的 Excel 文件 writer = pd.ExcelWriter(f'E:\ADFG\ADFG\dsad.xlsx') # 循环对每个 XLS 文件进行操作 for xls_file in xls_files: # 构造文件路径 file_path = os.path.join(folder_path, xls_file) # 使用 pandas 打开 XLS 文件 df = pd.read_excel(file_path) # 选取指定的字段 valid_columns = [col for col in selected_columns if col in df.columns] if len(valid_columns) < len(selected_columns): print(f"Warning: {xls_file} contains invalid column names, skipping them") # 去除特殊符号和非法字符 for col in valid_columns: df[col] = df[col].apply(lambda x: re.sub(r'[^\w\s]', '', str(x))) df[col] = df[col].apply(lambda x: re.sub(r'[\d]', '', str(x))) selected_data = df[valid_columns].astype(str) # 将选取的数据写入到新的 Excel 文件中 selected_data.to_excel(writer, sheet_name=xls_file) # 保存并关闭新的 Excel 文件 writer.save() writer.close()优化下代码,此代码把xls数据写入xlsx后,xlsx里面的数据是空白的,帮忙查下原因
时间: 2024-03-17 22:45:11 浏览: 54
根据你提供的代码,可能是以下几个原因导致生成的 xlsx 文件里面的数据为空白:
1. 文件路径问题:在 Windows 系统中,路径中的反斜杠(\)需要转义,所以路径应该写成双反斜杠(\\),或者使用原始字符串(在路径前加上 r),例如:
```
folder_path = r"E:\ADFG\ADFG"
writer = pd.ExcelWriter(r"E:\ADFG\ADFG\dsad.xlsx")
```
2. 选取数据时没有考虑到空值:如果选取的字段中存在空值,可能会导致整行数据被删除。可以使用 dropna() 方法删除空值,例如:
```
selected_data = df[valid_columns].astype(str).dropna()
```
3. 数据类型问题:使用 `astype(str)` 将数据类型转换为字符串,但是如果原始数据类型不是字符串,可能会出现问题。可以使用 `to_string()` 方法将数据转换为字符串,例如:
```
selected_data = df[valid_columns].apply(lambda x: x.to_string(index=False), axis=1)
```
建议逐一排查以上原因,找到问题所在。
相关问题
f = zipfile.ZipFile(f"E:\ADFG\ADFG\ADFG2.rar", 'r') # 压缩文件位置 for file in f.namelist(): f.extract(file, "E:ADFGxADFGx") # 解压位置 f.close() # 指定要查找的文件夹路径 folder_path = "E:\ADFG\ADFG" # 指定要选取的字段 selected_columns = ['HHHHH', 'GDGGD'] # 使用 os 模块列出文件夹中所有的 XLS 文件 xls_files = [f for f in os.listdir(folder_path) if f.endswith('.xls')] # 创建一个新的 Excel 文件 writer = pd.ExcelWriter(f'E:\ADFG\ADFG\dsad.xlsx') # 循环对每个 XLS 文件进行操作 for xls_file in xls_files: # 构造文件路径 file_path = os.path.join(folder_path, xls_file) # 使用 pandas 打开 XLS 文件 df = pd.read_excel(file_path) # 选取指定的字段 valid_columns = [col for col in selected_columns if col in df.columns] if len(valid_columns) < len(selected_columns): print(f"Warning: {xls_file} contains invalid column names, skipping them") # 去除特殊符号和非法字符 for col in valid_columns: df[col] = df[col].apply(lambda x: re.sub(r'[^\w\s]', '', str(x))) df[col] = df[col].apply(lambda x: re.sub(r'[\d]', '', str(x))) selected_data = df[valid_columns].astype(str) # 将选取的数据写入到新的 Excel 文件中 selected_data.to_excel(writer, sheet_name=xls_file) # 保存并关闭新的 Excel 文件 writer.save() writer.close()优化这个代码,使每次读取xls指定字段的时候,打印当前字段数据的类型
可以将代码中的以下部分进行修改:
```
# 选取指定的字段
valid_columns = [col for col in selected_columns if col in df.columns]
if len(valid_columns) < len(selected_columns):
print(f"Warning: {xls_file} contains invalid column names, skipping them")
# 去除特殊符号和非法字符
for col in valid_columns:
df[col] = df[col].apply(lambda x: re.sub(r'[^\w\s]', '', str(x)))
df[col] = df[col].apply(lambda x: re.sub(r'[\d]', '', str(x)))
selected_data = df[valid_columns].astype(str)
```
改为:
```
# 选取指定的字段
valid_columns = [col for col in selected_columns if col in df.columns]
if len(valid_columns) < len(selected_columns):
print(f"Warning: {xls_file} contains invalid column names, skipping them")
# 循环对每个字段进行操作并打印数据类型
for col in valid_columns:
col_data = df[col].astype(str)
print(f"Data type of column {col}: {col_data.dtype}")
col_data = col_data.apply(lambda x: re.sub(r'[^\w\s]', '', str(x)))
col_data = col_data.apply(lambda x: re.sub(r'[\d]', '', str(x)))
selected_data[col] = col_data
```
这样修改后,每次选取指定字段时都会循环对每个字段进行操作,并打印出该字段的数据类型。
import os import zipfile import pandas as pd def zipjie(): f = zipfile.ZipFile("E:\dsad\dsad据\d8.rar", 'r') # 压缩文件位置 for file in f.namelist(): f.extract(file, "E:\dsad\dsad据") # 解压位置 f.close() # 指定要查找的文件夹路径 folder_path = "E:\王dsad\dsad据" # 指定要选取的字段 selected_columns = ['dsad', 'dasda','工dadsa'] # 使用 os 模块列出文件夹中所有的 XLS 文件 xls_files = [f for f in os.listdir(folder_path) if f.endswith('.xls')] # 创建一个新的 Excel 文件 writer = pd.ExcelWriter('E:\dsad\dsad据\qwd.xlsx') # 循环对每个 XLS 文件进行操作 for xls_file in xls_files: # 构造文件路径 file_path = os.path.join(folder_path, xls_file) # 使用 pandas 打开 XLS 文件 df = pd.read_excel(file_path) # 选取指定的字段,并判断,若不存在的字段跳过 valid_columns = [col for col in selected_columns if col in df.columns] if len(valid_columns) < len(selected_columns): print(f"Warning: {xls_file} contains invalid column names, skipping them") selected_data = df[valid_columns] # 将选取的数据写入到新的 Excel 文件中 selected_data.to_excel(writer, sheet_name=xls_file) # 保存并关闭新的 Excel 文件 writer.save() writer.close() zipjie() 帮我改造下,写一段去除特殊符号,非法字符的正则表达式
好的,以下是改造后的代码,使用正则表达式去除特殊符号和非法字符:
import os
import zipfile
import pandas as pd
import re
def zipjie():
f = zipfile.ZipFile("E:\dsad\dsad据\d8.rar", 'r') # 压缩文件位置
for file in f.namelist():
f.extract(file, "E:\dsad\dsad据") # 解压位置
f.close()
# 指定要查找的文件夹路径
folder_path = "E:\王dsad\dsad据"
# 指定要选取的字段
selected_columns = ['dsad', 'dasda','工dadsa']
# 使用 os 模块列出文件夹中所有的 XLS 文件
xls_files = [f for f in os.listdir(folder_path) if f.endswith('.xls')]
# 创建一个新的 Excel 文件
writer = pd.ExcelWriter('E:\dsad\dsad据\qwd.xlsx')
# 循环对每个 XLS 文件进行操作
for xls_file in xls_files:
# 构造文件路径
file_path = os.path.join(folder_path, xls_file)
# 使用 pandas 打开 XLS 文件
df = pd.read_excel(file_path)
# 选取指定的字段,并判断,若不存在的字段跳过
valid_columns = [col for col in selected_columns if col in df.columns]
if len(valid_columns) < len(selected_columns):
print(f"Warning: {xls_file} contains invalid column names, skipping them")
# 去除特殊符号和非法字符
for col in valid_columns:
df[col] = df[col].apply(lambda x: re.sub(r'[^\w\s]','',str(x)))
df[col] = df[col].apply(lambda x: re.sub(r'[\d]', '', str(x)))
selected_data = df[valid_columns]
# 将选取的数据写入到新的 Excel 文件中
selected_data.to_excel(writer, sheet_name=xls_file)
# 保存并关闭新的 Excel 文件
writer.save()
writer.close()
zipjie()
阅读全文