Python脚本从excelsearch文本到文本,然后将其相应的值插入到Excel中

我必须写一个python脚本。 我有一个文本文件和一个Excel表。 Excel工作表包含一些文件名称。 文本文件中也存在excel中的名称。 在文本文件中,存在对应于每个文件名的RAM和ROM存储器,其存在于与文件名相同的行中。 现在我必须从Excel工作表读取文件名并在文本文件中进行search。 然后提取文件名中相应文本文件中的内存,然后将该内存值放入Excel中。 我search了很多,但没有得到任何解决scheme。 任何人都可以帮我这个。

例:

Excel工作表:

  **文件名** ** Ram ** ** Rom **  

 Name1,Name2         

 NAME3                          

 Name4,Name5                

 Name7,Name8,Name9     

文本文件:

名字Rom1 Ram1 Ram2 Rom2 Rom3

姓名1 56 79 26 89

名字2 57 80 29 66        

姓名3 89 96 89

姓名4 72 79 26 52 96

姓名5 23 32 36 21 89

姓名6 98 12 65 32

姓名7 87 10 91 89

姓名8 99 59 32

姓名8 56 65 45 66 12

Ram填写Excel = Ram1 + Ram2

Rom将填写Excel = Rom1 + Rom2 + Rom3

您可以使用

openpyxl

python模块处理excel读写。 使用这个模块,你可以读取excel文件,并使用正常的文件处理,你可以阅读文本文件,并做你想要的操作

对于文档检查这..

你已经尝试过任何代码? 我会build议你看看pandas,它有一个很好的function来读取excel。 然后,您可以从pandas数据框中提取信息,并将其写回到新的Excel文件中。

https://pandas.pydata.org/pandas-docs/stable/generated/pandas.read_excel.html

假设你的excel文件结构是固定的,你可以试试这个:

 import xlrd import re import csv from xlutils.copy import copy names = [] w = xlrd.open_workbook('excel_file.xlsx') s = w.sheet_by_index(0) names_column = s.col_values(0) del(names_column[0]) names = [] for name in names_column: if re.match(r'Name[1-9]', name): tmp = name.split(',') tmp = list(map(str, tmp)) tmp = list(map(str.strip, tmp)) names.extend(tmp) # print(names) names_rom = {} names_ram = {} for name in names: names_rom[name] = 0 names_ram[name] = 0 memory = [] with open('text_file.txt', 'r') as text_file: reader = csv.reader(text_file) for line in reader: if len(line) != 0: memory.append(line) # print(memory) del(memory[0]) processed_memory = [] for line in memory: tmp = line[0].split(' ') tmp = [item for item in tmp if item != ''] processed_memory.append(tmp) # print('PROCESSED_MEMORY:', processed_memory) for m in processed_memory: print('M:', m) names_rom[m[0]] = int(m[1]) + int(m[4]) + int(m[5]) names_ram[m[0]] = int(m[2]) + int(m[3]) # print(names_rom) # print(names_ram) wb = copy(w) sheet = wb.get_sheet(0) sheet.write(2, 1, names_ram['Name1'] + names_ram['Name2']) sheet.write(2, 2, names_rom['Name1'] + names_rom['Name2']) sheet.write(4, 1, names_ram['Name3']) sheet.write(4, 2, names_rom['Name3']) sheet.write(6, 1, names_ram['Name4'] + names_ram['Name5']) sheet.write(6, 2, names_rom['Name4'] + names_rom['Name5']) sheet.write(8, 1, names_ram['Name7'] + names_ram['Name8'] + names_ram['Name9']) sheet.write(8, 2, names_rom['Name7'] + names_rom['Name8'] + names_ram['Name9']) wb.save('excel_file.xlsx') 

请注意,我没有非常彻底地检查ROM和RAM数据。 我起诉了库: xlrdxlutilscsv用于处理文件。 这只是给你一个想法如何解决你的问题。 希望这可以帮助。

使用pandas

读取excel文件

 df = pd.read_excel('filenames.xlsx', index_col=0) 

DF

  ram rom filename Name1, Name2 NaN NaN Name3 NaN NaN Name4, Name5 NaN NaN Name7, Name8, Name9 NaN NaN 

阅读文本文件

 usage_raw = pd.read_csv('data/usage.txt', sep='\s+', index_col=0) 

usage_raw

  Rom1 Ram1 Ram2 Rom2 Rom3 Name Name1 56 79 26 89.0 NaN Name2 57 80 29 66.0 NaN Name3 89 96 89 NaN NaN Name4 72 79 26 52.0 96.0 Name5 23 32 36 21.0 89.0 Name6 98 12 65 32.0 NaN Name7 87 10 91 89.0 NaN Name8 99 59 32 NaN NaN Name9 56 65 45 66.0 12.0 

获取rom和ram数据的列

 rom_columns = usage_raw.columns[usage_raw.columns.str.startswith('Rom')] ram_columns = usage_raw.columns[usage_raw.columns.str.startswith('Ram')] 

rom_columns,ram_columns

 (Index(['Rom1', 'Rom2', 'Rom3'], dtype='object'), Index(['Ram1', 'Ram2'], dtype='object')) 

总结每个名字

 usage_df = pd.DataFrame(index=usage_raw.index, columns=['rom', 'ram']) usage_df['rom'] = usage_raw[rom_columns].sum(axis=1) usage_df['ram'] = usage_raw[ram_columns].sum(axis=1) 

usage_df

  rom ram Name Name1 145.0 105 Name2 123.0 109 Name3 89.0 185 Name4 220.0 105 Name5 133.0 68 Name6 130.0 77 Name7 176.0 101 Name8 99.0 91 Name9 134.0 110 

把它放在一起

 for row in df.index: df.loc[row] = usage_df.loc[row.split(', ')].sum(axis=0) 

DF

  ram rom filename Name1, Name2 214.0 268.0 Name3 185.0 89.0 Name4, Name5 173.0 353.0 Name7, Name8, Name9 302.0 409.0