从列表中读取文件名然后附加它们不会附加文件

reading file names from a list and then appending them does not append files

我有一个包含文件名称的列表。

我想将所有文件的内容附加到第一个文件中,然后将该文件(附加的第一个文件)复制到新路径。

这是我到目前为止所做的: 这是附加代码的一部分(我在问题的末尾放了一个可重现的程序,请看一下:)。

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)

你能告诉我问题是什么吗?

你可以这样做,如果文件太大而无法加载,你可以按照Python append multiple files in given order to one big file

中的说明使用readlines
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)

我就是这样解决的。 那是非常愚蠢的错误:|不加入它的基本路径。 我将其更改为使用 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)