鱼C论坛

 找回密码
 立即注册
查看: 2383|回复: 23

[已解决]求教关于excel文件转txt文件

[复制链接]
发表于 2019-9-16 06:17:33 | 显示全部楼层 |阅读模式
20鱼币
问题1:目前代码只能提取分析并打印excel文件到IDLE中,请问如何能将提取的这部分数据保存为指定位置TXT文本,然后关闭这个excel文件(原excel文件不作修改)?
问题2:打开excel文件不指定文件名,只指定位置和xlsx格式,从存放位置中打开选取,要如何修改?
excel文件禁止上传?

import pandas as pd

df = pd.read_excel('阀门(化工厂).xlsx',sep='?',skiprows=[0,1])
df.head()
data1 = []
data2 = []
result = []

data1=df.ix[2,6]

if '/' in data1:
    data1=='              '
else:
    data1==data1+(14-len(data1))*' '
   
data2=df.ix[2,13]

if '/' in data2:
    data2=='              '
    data2.append(line_spoken)

elif '单' in data2:
    result=='SR'
else:
    result=='DA'
   
print(' '*14,data1, data2, end='')

#df.close()
最佳答案
2019-9-16 06:17:34
本帖最后由 XiaoPaiShen 于 2019-9-25 01:00 编辑
  1. import pandas as pd
  2. import easygui as g

  3. # excel_file = '阀门(化工厂).xlsx'
  4. excel_file = g.fileopenbox(msg=None, title=None, default="D:/Document/Python/Lianxi/*.xlsx", filetypes=None, multiple=False)
  5. df = pd.read_excel(excel_file,sep='?',skiprows=[0,1])

  6. cols = ['阀体', '执行机构']
  7. df_list_two = df[cols]

  8. data1 = []
  9. data2 = []

  10. for index, row in df_list_two.iterrows():
  11.     print(row['阀体'], row['执行机构'])
  12.     # business logic

  13.     if '/' in row['阀体']:
  14.         data1.append(' ' * 14)
  15.     else:
  16.         data1.append(row['阀体'])

  17.     if '/' in row['执行机构']:
  18.         data2.append(' ' * 14)
  19.     else:
  20.         data2.append(row['执行机构'])

  21. txt_file = g.filesavebox(msg=None, title=None, default="D:/Document/Python/Lianxi/*.txt", filetypes=None)
  22. write_file = open(txt_file, mode='wt', encoding='UTF-8')

  23. for index in range(len(data1)):
  24.     write_line = data1[index] + data2[index] + '\n'
  25.     write_file.write(write_line)

  26. write_file.close()
复制代码


请根据你的业务逻辑修改cols, row['   '], 以及循环中的逻辑,你贴的代码没明白业务逻辑,我没百度网盘的账号,只好照着图片模仿。。。

最佳答案

查看完整内容

请根据你的业务逻辑修改cols, row[' '], 以及循环中的逻辑,你贴的代码没明白业务逻辑,我没百度网盘的账号,只好照着图片模仿。。。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2019-9-16 06:17:34 | 显示全部楼层    本楼为最佳答案   
本帖最后由 XiaoPaiShen 于 2019-9-25 01:00 编辑
  1. import pandas as pd
  2. import easygui as g

  3. # excel_file = '阀门(化工厂).xlsx'
  4. excel_file = g.fileopenbox(msg=None, title=None, default="D:/Document/Python/Lianxi/*.xlsx", filetypes=None, multiple=False)
  5. df = pd.read_excel(excel_file,sep='?',skiprows=[0,1])

  6. cols = ['阀体', '执行机构']
  7. df_list_two = df[cols]

  8. data1 = []
  9. data2 = []

  10. for index, row in df_list_two.iterrows():
  11.     print(row['阀体'], row['执行机构'])
  12.     # business logic

  13.     if '/' in row['阀体']:
  14.         data1.append(' ' * 14)
  15.     else:
  16.         data1.append(row['阀体'])

  17.     if '/' in row['执行机构']:
  18.         data2.append(' ' * 14)
  19.     else:
  20.         data2.append(row['执行机构'])

  21. txt_file = g.filesavebox(msg=None, title=None, default="D:/Document/Python/Lianxi/*.txt", filetypes=None)
  22. write_file = open(txt_file, mode='wt', encoding='UTF-8')

  23. for index in range(len(data1)):
  24.     write_line = data1[index] + data2[index] + '\n'
  25.     write_file.write(write_line)

  26. write_file.close()
复制代码


请根据你的业务逻辑修改cols, row['   '], 以及循环中的逻辑,你贴的代码没明白业务逻辑,我没百度网盘的账号,只好照着图片模仿。。。

评分

参与人数 1荣誉 +2 鱼币 +2 贡献 +1 收起 理由
晚起鸟儿 + 2 + 2 + 1 谢谢解答

查看全部评分

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

使用道具 举报

发表于 2019-9-16 08:31:32 | 显示全部楼层

  1. path = os.getcwd() + '\\'                   #获取当前目录
  2. all_file=os.listdir(path)                       #返回指定的文件夹包含的文件或文件夹的名字的列表。
  3. files = [x for x in all_file if ".xlsx" in x]       #删除文件夹路径,只保留指定文件文件路径并保存为列表
复制代码

  1. with open('test.txt','a') as ff:
  2.     for a in add_lists:
  3.         ff.write(a)
复制代码

评分

参与人数 1荣誉 +2 鱼币 +2 贡献 +1 收起 理由
晚起鸟儿 + 2 + 2 + 1 谢谢解答

查看全部评分

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

使用道具 举报

发表于 2019-9-16 08:45:32 | 显示全部楼层
本帖最后由 彩虹七号 于 2019-9-16 08:50 编辑

问题1:提取的数据如果是list,可以用''.join(list)将其转换为str,再用
    with open("filename.txt","w") as f:
        f.write(str)
进行保存。
如果提取的数据是Series,可以用tolist()将其转换为list,再用上面的方法保存
问题2:如果要用pandas读取文件必须指定文件地址和文件名,pandas可以读取很多种文件(pd.read_csv, pd.read_html, pd.read_table...)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2019-9-16 09:44:34 | 显示全部楼层
读取目录下的 Excel 文件 参考这个哥们儿的答案 snaker

  1. def foo2():
  2.     # 读取 Excel
  3.     df = pd.read_excel("Excel 绝对地址")
  4.     # 获取所有的单元格 值
  5.     # values 长这样 [['xxx','xxx','xxx','xxx',],['xxx','xxx','xxx','xxx',]]
  6.     values = df.values
  7.     for value in values:
  8.         # 使用列表推导式 替换 SR DA
  9.         value = [i if '单' not in i else 'DA' for i in value]
  10.         value = [i if 'DA' == i else 'SR' for i in value]
  11.         # 将其格式化为字符串
  12.         write_str = '    '.join(value)
  13.         # 加上一个换行符用来换行
  14.         write_str += '\n'
  15.         with open('text.txt', 'w+') as f:
  16.             f.write(write_str)
复制代码

评分

参与人数 1荣誉 +2 鱼币 +2 贡献 +1 收起 理由
晚起鸟儿 + 2 + 2 + 1 谢谢解答

查看全部评分

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

使用道具 举报

 楼主| 发表于 2019-9-16 20:02:13 | 显示全部楼层
、尾指一勾 发表于 2019-9-16 09:44
读取目录下的 Excel 文件 参考这个哥们儿的答案 snaker

试了根本没起作用呀……
  1. import pandas as pd
  2. def foo2():
  3.     # 读取 Excel
  4.     df = pd.read_excel('阀门(化工厂).xlsx',sep='?',skiprows=[0,1])
  5.     values [['2,6'],['2,13']]
  6.     values = df.values
  7.     for value in values:
  8.         value = [i if '单' not in i else 'DA' for i in value]
  9.         value = [i if 'DA' == i else 'SR' for i in value]
  10.         # 将其格式化为字符串
  11.         write_str = '    '.join(value)
  12.         # 加上一个换行符用来换行
  13.         write_str += '\n'
  14.         with open('text.txt', 'w+') as f:
  15.             f.write(write_str)
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2019-9-16 20:20:23 | 显示全部楼层

不行的,第一句就报错……
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2019-9-17 08:14:33 | 显示全部楼层
晚起鸟儿 发表于 2019-9-16 20:20
不行的,第一句就报错……

import os啊
而且你需要修改的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2019-9-17 09:22:37 | 显示全部楼层
晚起鸟儿 发表于 2019-9-16 20:20
不行的,第一句就报错……

你把文件丢出来 要得结果丢出来
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2019-9-18 03:40:52 | 显示全部楼层
、尾指一勾 发表于 2019-9-17 09:22
你把文件丢出来 要得结果丢出来

EXCEL表格文件,后缀为.xlsx,无法上传。只能截图上传,就是要提取分析[2,6]和[2,13],将下图经过修改的数据保存为.txt文本文件
鱼C1.jpg
鱼C.jpg
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2019-9-18 08:18:09 From FishC Mobile | 显示全部楼层
晚起鸟儿 发表于 2019-9-18 03:40
EXCEL表格文件,后缀为.xlsx,无法上传。只能截图上传,就是要提取分析[2,6]和[2,13],将下图经过 ...

可以打包啊,你传截图有神马用
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2019-9-18 09:24:35 | 显示全部楼层
import pandas as pd
df = pd.read_excel('filename',skiprows=2,usecols='B:F') #读取[2,6]
df = pd.read_excel('filename',skiprows=2,usecols='B:M') #读取[2,13]

保存
with open("filename.txt","w") as f:
        for i in range(df.index):
            f.write(' '.join(df.loc[i].values.tolist()))
            f.write('\n')
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2019-9-18 18:45:42 | 显示全部楼层
本帖最后由 晚起鸟儿 于 2019-9-18 18:54 编辑
wp231957 发表于 2019-9-18 08:18
可以打包啊,你传截图有神马用


360压缩后传不了,7Z压缩后禁止上传……
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2019-9-18 18:59:46 | 显示全部楼层
彩虹七号 发表于 2019-9-18 09:24
import pandas as pd
df = pd.read_excel('filename',skiprows=2,usecols='B:F') #读取[2,6]
df = pd.rea ...

鱼C.jpg
大佬,错误呀……
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2019-9-19 08:35:52 | 显示全部楼层
本帖最后由 彩虹七号 于 2019-9-19 08:37 编辑


保存
with open('filenam.txt','w') as f:
        for i in range(df.shape[0]):
                row_datas = df.loc.values.tolist()
                row_datas_str = ' '.join('%s' %id for id in row_datas)
                print(row_datas_str)
                f.write(' '.join(row_datas_str))
                f.write('\n')

评分

参与人数 1荣誉 +2 鱼币 +2 贡献 +1 收起 理由
晚起鸟儿 + 2 + 2 + 1 谢谢解答

查看全部评分

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

使用道具 举报

发表于 2019-9-20 10:08:59 | 显示全部楼层
晚起鸟儿 发表于 2019-9-18 03:40
EXCEL表格文件,后缀为.xlsx,无法上传。只能截图上传,就是要提取分析[2,6]和[2,13],将下图经过 ...

传个网盘 分享连接
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2019-9-20 12:12:44 From FishC Mobile | 显示全部楼层
、尾指一勾 发表于 2019-9-20 10:08
传个网盘 分享连接

复制这段内容后打开百度网盘手机App,操作更方便哦链接:https://pan.baidu.com/s/11jlx83yNMMXnl-OqEm2UbA提取码:x3k5
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2019-9-20 12:13:36 From FishC Mobile | 显示全部楼层
彩虹七号 发表于 2019-9-19 08:35
保存
with open('filenam.txt','w') as f:
        for i in range(df.shape[0]):

复制这段内容后打开百度网盘手机App,操作更方便哦链接:https://pan.baidu.com/s/11jlx83yNMMXnl-OqEm2UbA提取码:x3k5
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2019-9-23 02:02:09 | 显示全部楼层
困扰好多天了,哪位高人帮改下代码,EXCEL文件传不了,麻烦在百度网盘下载
https://pan.baidu.com/s/11jlx83yNMMXnl-OqEm2UbA提取码:x3k5

  1. import pandas as pd
  2. import re
  3. import json

  4. import xlrd
  5. f = pd.read_excel('阀门(化工厂).xlsx',sep='\t', encoding='gbk')

  6. f.head()
  7.    
  8. data1=f.ix[2,6]

  9. if '/' in data1:
  10.     data1='              '
  11. else:
  12.     data1=data1+(14-len(data1))*' '
  13.      
  14. data2=f.ix[2,13]

  15. if '/' in data2:
  16.     data2='              '

  17. elif '单' in data2:
  18.     result='SR'
  19. else:
  20.     result='DA'
  21. data2 = re.sub("\D","", data2)   
  22. data2 = data2+result

  23. def my(data1,data2):
  24.     return ' '*14,data1, data2

  25. print(' '*14,data1, data2)
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2019-9-24 14:06:44 | 显示全部楼层
可以做一个把excel转化为dbf的程序吗
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-19 18:00

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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