如果文件不存在,则备份dir中的文件

时间:2016-11-02 12:31:55

标签: python python-3.x path directory python-os

我有一个Pathfile.dat,文件名在该文件中, 我正在尝试复制文件的备份(如果已经存在的话)

我遇到了这个功能的问题" if files.is_file():"

以下是我似乎得到的错误

/家/管理/ Pycharm /备份/ TEST1

未找到 /家/管理/ Pycharm /备份/ TEST2

未找到 cp:在'/ home / admin / Pycharm / backup / test1'

之后缺少目标文件操作数

尝试cp --help'了解更多信息。

sh:2:/ home / admin / Pycharm / backup /:not found

sh:3:_copy:not found

cp:'/ home / admin / Pycharm / backup / test2'后缺少目标文件操作数

尝试cp --help'了解更多信息。

sh:2:/ home / admin / Pycharm / backup /:not found

sh:3:_copy:not found

import os
from pathlib import Path
import logging


filename = 'config.dat'
Configlist = []

def createlist(): 
    with open(filename) as f:
        for item in f:
            Configlist.append(os.path.abspath(item))


def copy():
    for list in Configlist:
        print(list)
        files = Path(list)
        if files.is_file():
            print("Found")
        else:
            print("not Found")
            os.system("cp -R " + list + " /home/admin/Pycharm/backup/ " + list + "_copy ")

createlist()
copy()

1 个答案:

答案 0 :(得分:1)

问题并不完全清楚,但使用cp命令创建字符串的方式肯定存在问题

如果你打印os.system方法中使用的字符串,你可以看到如下内容:

cp -R /yourpathfile/file /home/admin/Pycharm/backup/ /yourpathfile/file _copy 

cp将两个参数作为输入(源和目标) 第二次使用带路径的名称连接列表时,只需要文件名。

在字符串“/ home / admin / Pycharm / backup /”的末尾还有一个 space ,所以如果你用文件名连接它会给你一个错误

我试图以这种方式调整cp部分,这似乎有效:

import os
from pathlib import Path
import logging


filename = 'config.dat'
Configlist = []

def createlist():
    with open(filename) as f:
        for item in f:
            Configlist.append((os.path.abspath(item), item))


def copy():
    for (list,name) in Configlist:
        files = Path(list)
        if files.is_file():
            print("Found")
        else:
            print("not Found")
            string = "cp -R " + str(list[:-1]) + " /home/admin/Pycharm/backup/"+name[:-1] + "_copy "
            print(string)
            os.system(string)

createlist()
copy()