鱼C论坛

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

[已解决]请帮忙改下excel提取字符

[复制链接]
发表于 2019-10-9 06:48:43 | 显示全部楼层 |阅读模式
20鱼币
打标.jpg
如图提取excel红框里的“执行机构”行下面的内容,行数和内容未知,判断如果是“/”保存为14个空格,此单元格后面不作判断。

如果此单元格含有字符“单作用”保存为“SR”,如果含有字符“双作用”保存为“DA”并将此单元格提取的数字放到前面,如图所示:
打标1.jpg

每个单元格完成后换行,保存为text文本。谢谢各位大神关注,以下为我的代码:

import pandas as pd
import easygui as g
import re

excel_file = g.fileopenbox(msg=None, title=None, default="*.xlsx", filetypes=None, multiple=False)
df = pd.read_excel(excel_file,sep='?',skiprows=[0,1])

cols = ['执行机构']
df_list_two = df[cols]

data2 = []
result = []

for index, row in df_list_two.iterrows():
    #将列表转换为无分隔符的字符串
    result = ''.join(row['执行机构'])
    if '单'in result:
        result='SR'
    elif '双'in result:
        result='DA'
    else:
        result=''

    result = result.__str__()
   
    data2 = ''.join(row['执行机构'])   
    if '/' in row['执行机构']:
        data2=(' ' * 14)
    else:               
        #使用re模块下的方法findall对data2进行正则匹配,提取出所有的数值型字符串
        data2 = re.findall(r"\d+",data2)
        data2 = ''.join(data2)
        data2 = data2.__str__()  
    data2 = data2,result   
   
txt_file = g.filesavebox(msg=None, title=None, default="智能打标.text", filetypes=None)

write_file = open(txt_file, mode='w', encoding='UTF-8')

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

write_file.close()
最佳答案
2019-10-9 06:48:44
本帖最后由 XiaoPaiShen 于 2019-10-9 09:51 编辑
  1. import pandas as pd
  2. import easygui as g
  3. import re

  4. excel_file = g.fileopenbox(msg=None, title=None, default="*.xlsx", filetypes=None, multiple=False)
  5. df = pd.read_excel(excel_file,sep='?',skiprows=[0,1])

  6. result = []
  7. cols = ['执行机构']
  8. df_list = df[cols]

  9. row_content = ''
  10. suffix = ''
  11. pattern = r'(\d+)'

  12. for index, row in df_list.iterrows():
  13.     #将列表转换为无分隔符的字符串
  14.     zxjg = ''.join(row['执行机构'])

  15.     if '/' in zxjg:
  16.         row_content = ' '*14
  17.     else:        
  18.         temp_content = re.findall(pattern, zxjg)
  19.         
  20.         if '单'in zxjg:
  21.             suffix = 'SR'            
  22.         elif '双'in zxjg:
  23.             suffix = 'DA'

  24.         row_content = '{0}{1}'.format(temp_content[0], suffix)

  25.     result.append(row_content)   


  26.    
  27. txt_file = g.filesavebox(msg=None, title=None, default="智能打标.txt", filetypes=None)
  28. write_file = open(txt_file, mode='w', encoding='UTF-8')

  29. for index in range(len(result)):
  30.     write_line = result[index] + '\n'
  31.     write_file.write(write_line)

  32. write_file.close()
复制代码

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

使用道具 举报

发表于 2019-10-9 06:48:44 | 显示全部楼层    本楼为最佳答案   
本帖最后由 XiaoPaiShen 于 2019-10-9 09:51 编辑
  1. import pandas as pd
  2. import easygui as g
  3. import re

  4. excel_file = g.fileopenbox(msg=None, title=None, default="*.xlsx", filetypes=None, multiple=False)
  5. df = pd.read_excel(excel_file,sep='?',skiprows=[0,1])

  6. result = []
  7. cols = ['执行机构']
  8. df_list = df[cols]

  9. row_content = ''
  10. suffix = ''
  11. pattern = r'(\d+)'

  12. for index, row in df_list.iterrows():
  13.     #将列表转换为无分隔符的字符串
  14.     zxjg = ''.join(row['执行机构'])

  15.     if '/' in zxjg:
  16.         row_content = ' '*14
  17.     else:        
  18.         temp_content = re.findall(pattern, zxjg)
  19.         
  20.         if '单'in zxjg:
  21.             suffix = 'SR'            
  22.         elif '双'in zxjg:
  23.             suffix = 'DA'

  24.         row_content = '{0}{1}'.format(temp_content[0], suffix)

  25.     result.append(row_content)   


  26.    
  27. txt_file = g.filesavebox(msg=None, title=None, default="智能打标.txt", filetypes=None)
  28. write_file = open(txt_file, mode='w', encoding='UTF-8')

  29. for index in range(len(result)):
  30.     write_line = result[index] + '\n'
  31.     write_file.write(write_line)

  32. write_file.close()
复制代码

评分

参与人数 1荣誉 +3 鱼币 +3 贡献 +2 收起 理由
晚起鸟儿 + 3 + 3 + 2 无条件支持楼主!

查看全部评分

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

使用道具 举报

发表于 2019-10-9 09:22:10 | 显示全部楼层
本帖最后由 yuweb 于 2019-10-9 09:33 编辑

我改了下代码,#########后面是我有改动的地方,加了注释
  1. import pandas as pd
  2. import easygui as g
  3. import re

  4. excel_file = g.fileopenbox(msg=None, title=None, default="*.xlsx", filetypes=None, multiple=False)
  5. #########这边的skiprows=[0,1]可以不用
  6. df = pd.read_excel(excel_file,sep='?')
  7. cols = ['执行机构']
  8. df_list_two = df[cols]

  9. data2 = []
  10. result = []
  11. #########这边加一个存放结果的
  12. data = []

  13. for index, row in df_list_two.iterrows():
  14.     #将列表转换为无分隔符的字符串
  15.     result = ''.join(row['执行机构'])
  16.     if '单'in result:
  17.         result='SR'
  18.     elif '双'in result:
  19.         result='DA'
  20.     else:
  21.         result=''

  22.     result = result.__str__()
  23.     #print(result)
  24.    
  25.     data2 = ''.join(row['执行机构'])   
  26.     if '/' in row['执行机构']:
  27.         data2=(' ' * 14)
  28.     else:               
  29.         #使用re模块下的方法findall对data2进行正则匹配,提取出所有的数值型字符串
  30.         data2 = re.findall(r"\d+",data2)
  31.         data2 = ''.join(data2)
  32.         data2 = data2.__str__()  
  33.     #########data2 = data2,result
  34.     #########这边加存放结果
  35.     data.append(data2+result)
  36.    
  37. print(data)
  38. txt_file = g.filesavebox(msg=None, title=None, default="智能打标.text", filetypes=None)

  39. write_file = open(txt_file, mode='w', encoding='UTF-8')

  40. #########这边的data2改为data
  41. for index in range(len(data)):
  42.     #########文件末可以不用换行
  43.     if index != len(data)-1:
  44.         write_line = data[index] + '\n'
  45.     else:
  46.         write_line = data[index]
  47.         
  48.     write_file.write(write_line)

  49. write_file.close()
复制代码


测试数据和测试结果
微信截图_20191009093154.png

评分

参与人数 1荣誉 +3 鱼币 +3 贡献 +1 收起 理由
晚起鸟儿 + 3 + 3 + 1 鱼C有你更精彩^_^

查看全部评分

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

使用道具 举报

发表于 2019-10-9 09:38:29 | 显示全部楼层
本帖最后由 彩虹七号 于 2019-10-9 11:13 编辑


import pandas as pd
import re


df = pd.read_excel(r'filename.xlsx',skiprows=2)

def fun(x):
        if '/' in x:
                x = ' ' * 14
                return x
        elif '单作用' in x:
                num = re.findall('\d+',x)[0]
                x = str(num) + 'SR'
                return x
        elif '双作用' in x:
                num = re.findall('\d+',x)[0]
                x = str(num) + 'DA'
                return x
        else:
                return x


df['执行机构'] = df['执行机构'].apply(fun)

with open("filename.txt","w") as f:
        for i in range(df.shape[0]):
                f.write(df.loc[i,'执行机构'])
                f.write('\n')

评分

参与人数 1荣誉 +3 鱼币 +3 贡献 -1 收起 理由
晚起鸟儿 + 3 + 3 -1 鱼C有你更精彩^_^

查看全部评分

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

使用道具 举报

发表于 2019-10-9 11:01:14 | 显示全部楼层
本帖最后由 彩虹七号 于 2019-10-9 11:16 编辑

你的问题还没解决呀

评分

参与人数 1贡献 +2 收起 理由
晚起鸟儿 + 2 贡献点错了补上,报歉

查看全部评分

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

使用道具 举报

 楼主| 发表于 2019-10-9 18:50:15 | 显示全部楼层
彩虹七号 发表于 2019-10-9 11:01
你的问题还没解决呀

我的问题一个接一个呀,这点分恐怕不大够用
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2019-10-9 19:19:21 | 显示全部楼层

哥们为何你如此优秀,又快又好,能否收我为徒
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2019-10-9 19:26:08 | 显示全部楼层
yuweb 发表于 2019-10-9 09:22
我改了下代码,#########后面是我有改动的地方,加了注释

兄弟辛苦了,可惜你们两位都报错了……谢谢解答 错.png
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2019-10-9 19:26:50 | 显示全部楼层
彩虹七号 发表于 2019-10-9 11:01
你的问题还没解决呀

兄弟辛苦了,可惜你们两位都报错了……谢谢解答 错.png
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2019-10-9 22:41:23 | 显示全部楼层
晚起鸟儿 发表于 2019-10-9 19:19
哥们为何你如此优秀,又快又好,...


太客气了,我们加为好友吧,有问题可以相互讨论。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-19 10:13

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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