我有一个包含文件名的列表。
我想将所有文件的内容附加到第一个文件中,然后将该文件(附加的第一个文件)复制到新路径。
这是我到目前为止所做的: 这是附加代码的一部分(我在问题的末尾放置了一个可重现的程序,请看一下:)。
if (len(appended) == 1):
shutil.copy(os.path.join(path, appended[0]), out_path_tempappendedfiles)
else:
with open(appended[0],'a+') as myappendedfile:
for file in appended:
myappendedfile.write(file)
shutil.copy(os.path.join(path, myappendedfile.name), out_path_tempappendedfiles)
此文件将成功运行并成功复制,但不会追加文件,而只是保留第一个文件的内容。
我也尝试过此link,它没有引发错误,但是没有附加文件。因此除了没有使用write
我使用shutil.copyobject
with open(file,'rb') as fd:
shutil.copyfileobj(fd, myappendedfile)
同一件事发生了。
更新1 这是完整的代码:
即使进行了更新,它仍然不会追加:
import os
import pandas as pd
d = {'Clinic Number':[1,1,1,2,2,3],'date':['2015-05-05','2015-05-05','2015-05-05','2015-05-05','2016-05-05','2017-05-05'],'file':['1a.txt','1b.txt','1c.txt','2.txt','4.txt','5.txt']}
df = pd.DataFrame(data=d)
df.sort_values(['Clinic Number', 'date'], inplace=True)
df['row_number'] = (df.date.ne(df.date.shift()) | df['Clinic Number'].ne(df['Clinic Number'].shift())).cumsum()
import shutil
path= 'C:/Users/sari/Documents/fldr'
out_path_tempappendedfiles='C:/Users/sari/Documents/fldr/temp'
for rownumber in df['row_number'].unique():
appended = df[df['row_number']==rownumber]['file'].tolist()
if (len(appended) == 1):
shutil.copy(os.path.join(path, appended[0]), out_path_tempappendedfiles)
else:
with open(appended[0],'a') as myappendedfile:
for file in appended:
fd=open(file,'r')
myappendedfile.write('\n'+fd.read())
fd.close()
Shutil.copy(os.path.join(path, myappendedfile.name), out_path_tempappendedfiles)
请让我知道是什么问题吗?
答案 0 :(得分:0)
您可以这样做,如果要加载的文件太大,则可以按照Python append multiple files in given order to one big file
中的指示使用读取行import os,shutil
file_list=['a.txt', 'a1.txt', 'a2.txt', 'a3.txt']
new_path=
with open(file_list[0], "a") as content_0:
for file_i in file_list[1:]:
f_i=open(file_i,'r')
content_0.write('\n'+f_i.read())
f_i.close()
shutil.copy(file_list[0],new_path)
答案 1 :(得分:0)
这就是我如何解决它。
那是非常愚蠢的错误:|没有加入它的基本路径。
我出于性能目的将其更改为使用shutil.copyobj
,但问题只能通过以下方式解决:
os.path.join(path,file)
在添加此内容之前,我实际上是从列表中的文件名读取的,而没有加入从实际文件中读取的基本路径:|
for rownumber in df['row_number'].unique():
appended = df[df['row_number']==rownumber]['file'].tolist()
print(appended)
if (len(appended) == 1):
shutil.copy(os.path.join(path, appended[0]), new_path)
else:
with open(appended[0], "w+") as myappendedfile:
for file in appended:
with open(os.path.join(path,file),'r+') as fd:
shutil.copyfileobj(fd, myappendedfile, 1024*1024*10)
myappendedfile.write('\n')
shutil.copy(appended[0],new_path)