【问题标题】:Copy only Employee id to excel sheet仅将员工 ID 复制到 Excel 工作表
【发布时间】:2020-11-23 08:11:08
【问题描述】:

我在记事本文件中有一个未格式化的数据,如下所示。

#Civil
GROUP CIVIL RPatel66 LKohli12 m12 PSen72 m72
GROUP CIVIL SKumar22 ASekar32 m32 BSiva90 
#Mechanical
GROUP MECHANICAL OKhan78 m78 MShah81 JKumar11 
GROUP MECHANICAL VHiremath12 TVasu43 m43 NReddy21
#Electrical
GROUP ELECTRICAL LPathan88 SPatil56 m56 AParth33
GROUP ELECTRICAL HAnil45 m45 Khari67 m67 Skumar49

当我运行下面的代码时

from openpyxl import Workbook
wb = Workbook()
ws = wb.active
f = open('C:\\Users\\Kiran\\Desktop\\Input.txt', 'r+') 
data = f.readlines()
spaces = ""
for i in range(len(data)):
    row = data[i].split(" ")  
    ws.append(row)
wb.save("Output1.xlsx")

import openpyxl
book= openpyxl.load_workbook('Output1.xlsx')
sheet = book['Sheet']
sheet.delete_cols(1,2) #deletes Column 1 and 2
book.save("Output1.xlsx") 

对于上述情况,我遇到了错误,并且没有获得所需的输出。

我需要在 excel 表中输出如下所示。我需要在 excel 表中输出为 Eg:Rpatel66、LKohli12 等,它不应包含 m12、m72

RPatel66
LKohli12
PSen72
SKumar22 
ASekar32
BSiva90
OKhan78
MShah81
JKumar11
VHiremath12
TVasu43
NReddy21
LPathan88
SPatil56
AParth33
HAnil45
Khari67
Skumar49

【问题讨论】:

  • 总是将完整的错误消息(从单词“Traceback”开始)作为文本(不是屏幕截图)放在有问题的(不是评论)中。还有其他有用的信息。
  • all m12, m72m 开头,长度为3 - 所以在你输入excel之前用它来过滤row中的值。但是您似乎没有做任何过滤,您尝试删除什么m12
  • 实际上在输出 excel 中我不需要 m12,m72,m32,m78,m43,m56,m45,m67。我不需要那些东西。对于任何给定的文本文件,我只需要“例如:Skumar49”
  • 然后在使用ws.append(row) 之前从row 中删除m12,m72,m32,m78,m43,m56,m45,m67。但是在您的代码中,您甚至都不会尝试这样做。
  • 即。 row = [x for x in row if not (len(x) == 3 and x[0] == 'm')]

标签: python pandas spyder


【解决方案1】:

请参阅以下代码以获得查询所需的输出。假设数据存在于

import re
import pandas as pd
with open("<your-file-name.txt>",'r') as f:
    content=f.readlines()
    
content = [x for x in content if not x.startswith('#')]
temp_content_1=list(map(lambda x: x.replace('GROUP','').replace('MECHANICAL','').replace('CIVIL','').replace('ELECTRICAL','').strip(), content))

temp_content_2=list(map(lambda x: re.sub(' m\d+','',x), temp_content_1))

final=' '.join(temp_content_2).split()
df=pd.DataFrame({"Employee":final})
df.to_excel("<your-output-file-name.xlsx>", index=None)

替代解决方案

import re
import pandas as pd
with open("<your-file-name.txt>",'r') as f:
    content=f.readlines()

temp_content_1=list(map(lambda x: re.sub(' m\d+','',x), content))
temp_content_2=' '.join(temp_content_1)

final=re.findall(r'\w+\d+', temp_content_2)    
df=pd.DataFrame({"Employee":final})
df.to_excel("<your-output-file-name.xlsx>", index=None)

【讨论】:

  • 此代码适用于这种情况,但我还有其他几个文本文件。那里的数据不同,它不包含 CIVIL ELECTRICAL MECHANICAL。那么在 Python 中有没有一种方法,对于给定的文本文件,我需要如上所示的输出。
  • 您可以添加其他关键字并对其进行预处理/清理。如果不先清理文本数据,就无法自动获取员工 ID。
  • 我已经用替代方法编辑了解决方案,仅使用正则表达式,但它假定员工关键字是单词和数字的组合
  • 如果它符合您的目的,请将其标记为已回答
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多