如何通过Python合并具有相同名称但在不同文件夹中的文件的内容?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何通过Python合并具有相同名称但在不同文件夹中的文件的内容?相关的知识,希望对你有一定的参考价值。
我正在尝试使用Python合并来自不同TXT文件的内容,但挑战是我需要合并来自不同文件夹的相同文件名的内容。这是一个截图供您参考:
到目前为止,我可以打印出所有文件名及其完整路径:
import os
for root, dirs, files in os.walk(".", topdown=False):
for file in files:
if file.endswith(".txt"):
filepath = os.path.join(root, file)
print (filepath)
但是,我怎么能使用Python只合并具有相同名称的文件......仍在研究中。如果您知道答案,请告诉我,或者给我一点研究方法。非常感谢,节日快乐!
答案
import os
# create a dictionary with file names as keys
# and for each file name the paths where they
# were found
file_paths = {}
for root, dirs, files in os.walk('.'):
for f in files:
if f.endswith('.txt'):
if f not in file_paths:
file_paths[f] = []
file_paths[f].append(root)
# for each file in the dictionary, concatenate
# the content of the files in each directory
# and write the merged content into a file
# with the same name at the top directory
for f, paths in file_paths.items():
txt = []
for p in paths:
with open(os.path.join(p, f)) as f2:
txt.append(f2.read())
with open(f, 'w') as f3:
f3.write(''.join(txt))
另一答案
您应该执行以下操作,请注意:代码未经过测试。
import os
mapped_files = {}
for path, subdirs, files in os.walk("."):
for file in files:
if file.endswith(".txt"):
if file in mapped_files:
existing = mapped_files[file]
mapped_files[file] = existing.append(path)
else:
mapped_files[file] = [path]
for key in mapped_files:
files = mapped_files[key]
first_f = os.path.join(path, files[0])
with open(first_f, "a+") as current_file:
for path in files[1:]: # start at the second index
f = os.path.join(path, key)
content = open(f,"r").read()
current_file.write(content) # add all content to the first file
以上是关于如何通过Python合并具有相同名称但在不同文件夹中的文件的内容?的主要内容,如果未能解决你的问题,请参考以下文章
按 ID 合并两个 Excel 文件并合并具有相同名称的列(python、pandas)