Python 解析大型excel文件并将结果写回带分隔符的文本文件
注意:自从问起我该怎么做?关于代码审查的问题是离题的,我将在这里尝试 我在一家跨国公司做IT实习生,我被分配了一项繁琐的任务,通过一个2500多列的excel报告文件来搜索非活动服务器 下面是该文件中的一个示例行: 然后,我得到了另一个excel文件,但这次只有DB代码(80多个) 我的任务是:Python 解析大型excel文件并将结果写回带分隔符的文本文件,python,excel,python-3.x,parsing,Python,Excel,Python 3.x,Parsing,注意:自从问起我该怎么做?关于代码审查的问题是离题的,我将在这里尝试 我在一家跨国公司做IT实习生,我被分配了一项繁琐的任务,通过一个2500多列的excel报告文件来搜索非活动服务器 下面是该文件中的一个示例行: 然后,我得到了另一个excel文件,但这次只有DB代码(80多个) 我的任务是: 浏览大报告文件 通过DB代码查找公司 检查服务器是否处于活动状态,如果未处于活动状态,则将其标记为停用 当然,正如您所料,我被告知以电子表格的形式返回结果,格式如下: 全名:Acme公司|代码:A
- 浏览大报告文件
- 通过DB代码查找公司
- 检查服务器是否处于活动状态,如果未处于活动状态,则将其标记为停用
全名:Acme公司|代码:ACM |活动?:否|装饰?:是
Fulln name:、code:,等等。
是列标题。在这里,它们只是为了可读性
如果我手工做的话,我很可能会无聊死。但是有Python,对吗
因此,我将报告中的一些列导出到以制表符分隔的文件中,并起草了以下内容:
def read_file_to_list(file_name):
with open(file_name, 'r') as file_handler:
stuff = file_handler.readlines()
return [line[:-1] for line in stuff]
def make_dic(file_name):
with open(file_name, 'r') as f:
rows = (line.replace('"', "").strip().split("\t") for line in f)
return {row[0]:row[1:] for row in rows}
def search(dic, ou_codes):
c = 1
for k, v in dic.items():
for code in ou_codes:
if v[0] == code:
print("{}. Full name: {} | Code: {} | Active?: {} | Decomm?: {}".format(c, k, *v, "yes" if v[1] == "no" else "no"))
c += 1
decomm_codes = read_file_to_list('decomm_codes.txt')
all_of_it = make_dic('big_report.txt')
search(all_of_it, decomm_codes)
这表明:
1. Full name: Random, Inc | Code: RNDM | Active?: yes | Decomm?: no
2. Full name: Acme Inc.| Code: ACM | Active?: no | Decomm?: yes
3. Full name: Fake Bank, Ltd. | Code: FKBNK | Active?: yes | Decomm?: no
问题:
它在我的终端窗口中看起来很好,但是我如何将结果写回以制表符分隔的文本文件中呢?看起来是这样的:
Acme公司ACM否是
另外,出于好奇,是否有办法重构search
方法,例如,重构为一行程序?嵌套列表理解仍然在我的学习列表中(双关语)
最后,这里是decomm_codes.txt
和big_report.txt
文件的内容
Decom_codes.txt:
RNDM
ACM
FKBNK
big_report.txt:
"Random, Inc" RNDM yes
Acme Inc. ACM no
"Fake Bank, Ltd. " FKBNK yes
您还可以将simpy写入文件:
def search(dic, ou_codes):
c = 1
# open a file to write to
with open ("output.tsv","w") as outfile:
outfile.write( "#\tFull name\tCode\tActive\tDecomm\n")
for k, v in dic.items():
for code in ou_codes:
if v[0] == code:
# create output line
outputline = "{}\t{}\t{}\t{}\t{}\n".format(
c, k, *v, "yes" if v[1] == "no" else "no")
c += 1
outfile.write(outputline)
print("{}. Full name: {} | Code: {} | Active?: {} | Decomm?: {}".format(
c, k, *v, "yes" if v[1] == "no" else "no"))
我看不到你的照片,但你为什么不直接使用VLOOKUP,然后另存为制表符分隔的呢?@harassedad,我不知道!我会尝试一下,看看这是否是我所需要的。