鱼C论坛

 找回密码
 立即注册
查看: 3217|回复: 7

[已解决]Python读取Excel数据整体写入ASCII文本文件

[复制链接]
发表于 2022-10-16 19:20:57 | 显示全部楼层 |阅读模式

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

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

x
本帖最后由 python_520_2022 于 2022-10-16 20:32 编辑

用Python读取Excel 的xlsx数据整体写入ASCII文本文件
写入后,ASCII文本文件中有多余的None,单引号,中括号

主要希望通过此写入,下次不同的Excel数据文件用Python自动转换为ASCII文本文件,用其他阅读器更方便阅读

各位大神帮忙看看,如何把Excel数据(包括字符串和float数据)写入.ascii文本文件,期望在ASCII数据是对齐的,希望的效果为如截图,具体参考手动复制出来的参考文件
最佳答案
2022-10-16 22:45:33
居然可以 4 行代码 就搞定了。。 看看是不是你想要的。
import pandas as pd 
df = pd.read_excel('input.xlsx', sheet_name='input')
df.columns = df.columns.tolist()[:4] + ['','']
df.to_csv('output_fixed_2.ascii', index=False, sep='\t', encoding='ascii') 

# 可用 git diff 对比查看,是否完全一样 
# git diff input.ascii output_fixed_2.ascii  
^_

期望效果

期望效果

input 手动复制生成的ASCII文件.zip

168.36 KB, 下载次数: 11

input_Excel数据文件.zip

654.09 KB, 下载次数: 6

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

使用道具 举报

 楼主| 发表于 2022-10-16 20:38:29 | 显示全部楼层
大神们帮忙看看,python生成的ASCII文件 和 手动复制的ASCII文件一样就行
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-10-16 21:46:59 | 显示全部楼层

回帖奖励 +10 鱼币

我想进一步问问

1. 你的意思是把excel文件中的所有单元格数据读取出来然后写入一个纯文本文件中对吗?

2. 我在你提供的input.ascii文件中并没有看到所谓的“多余的None,单引号、中括号”这些符号,可以说说你在什么情况下看到这些符号的吗?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-10-16 22:11:28 | 显示全部楼层
python_520_2022 发表于 2022-10-16 20:38
大神们帮忙看看,python生成的ASCII文件 和 手动复制的ASCII文件一样就行

我按照自己的理解写了一份代码,你看看行不行,需要用到一个名为openpyxl的第三方库:
from pathlib import Path

from openpyxl import load_workbook

input_file = 'input.xlsx'
output_file = Path(input_file).stem + '.ascii'  # 根据excel文件自动生成输出文件名

wb = load_workbook(input_file)
ws = wb.active

with open(output_file, 'w', encoding='utf-8') as f:
    for row in ws.values:  # 按行遍历工作表中的所有值
        temp = []  # 每一行的值写入临时列表temp中
        for v in row:
            if v is not None:  # 如果某个单元格不为空就把值转为字符串并存入temp中
                temp.append(str(v))
        line = '\t'.join(temp) + '\n'  # 使用制表符对齐每个单元格的数据,然后在行尾加上换行符
        f.write(line)  # 把一行数据写入文本文件中

wb.close()
如有不理解的请看注释语句或者留言

安装openpyxl的命令:
pip install openpyxl -i https://pypi.doubanio.com/simple --no-cache-dir
--no-cache-dir这个参数表示不保留缓存,可加可不加
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-10-16 22:45:33 | 显示全部楼层    本楼为最佳答案   

回帖奖励 +10 鱼币

居然可以 4 行代码 就搞定了。。 看看是不是你想要的。
import pandas as pd 
df = pd.read_excel('input.xlsx', sheet_name='input')
df.columns = df.columns.tolist()[:4] + ['','']
df.to_csv('output_fixed_2.ascii', index=False, sep='\t', encoding='ascii') 

# 可用 git diff 对比查看,是否完全一样 
# git diff input.ascii output_fixed_2.ascii  
^_
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-10-16 22:51:34 | 显示全部楼层

回帖奖励 +10 鱼币

从excel里读取后,一行一行写入即可,看了下,你那个对其应该是靠中间的ascii里的一个定位符来进行间隔的,所以从读取的每行数据里,每个元素后跟一个chr(9)写入即可,最后每行再加一个换行符即可
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-10-27 10:06:01 | 显示全部楼层
Brick_Porter 发表于 2022-10-16 22:11
我按照自己的理解写了一份代码,你看看行不行,需要用到一个名为openpyxl的第三方库:

如有不理解的请 ...

谢谢详细的解答,您这个方法很实用
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-10-27 10:06:35 | 显示全部楼层
阿奇_o 发表于 2022-10-16 22:45
居然可以 4 行代码 就搞定了。。 看看是不是你想要的。

^_

谢谢,专业,简洁
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-27 10:40

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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