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

时间:2018-07-22 22:40:11

标签: python list pandas file file-copying

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

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

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

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)

请让我知道是什么问题吗?

2 个答案:

答案 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)