【问题标题】:Backuping files in a dir if they don't already exists如果文件不存在,则在目录中备份文件
【发布时间】:2017-03-15 18:29:41
【问题描述】:

我有一个 Pathfile.dat,该文件中包含文件名, 如果文件不存在,我正在尝试复制文件的备份

我遇到了函数“if files.is_file():”的问题

以下是我似乎遇到的错误

/home/admin/Pycharm/backup/test1

未找到 /home/admin/Pycharm/backup/test2

未找到 cp: ‘/home/admin/Pycharm/backup/test1’后缺少目标文件操作数

尝试“cp --help”以获取更多信息。

sh: 2: /home/admin/Pycharm/backup/: 未找到

sh: 3: _copy: 未找到

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

尝试“cp --help”以获取更多信息。

sh: 2: /home/admin/Pycharm/backup/: 未找到

sh: 3: _copy: 未找到

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()

【问题讨论】:

  • 嗨大卫,你的问题让我很困惑。如果您将多个文件路径附加到列表中,您如何将备份本身一一检查复制功能? -->Path(list) 是错误的,你不会只有一个文件。此外 os.system 命令也抛出错误,因为没有正确完成。要复制文件,您还可以使用 shutil 模块。
  • 嗨,Marco,复制功能是我要解决的问题。谢谢
  • 那么 cp -R 也是错误的......意思是 -R, -r, --recursive 递归复制目录 :-) 只需检查 man。

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


【解决方案1】:

问题还不是很清楚,但是用 cp 命令创建字符串的方式肯定有问题

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

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

cp 将两个参数作为输入(源和目标) 当您第二次连接 list 时,您将名称与路径一起使用,但您只需要文件名。

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

我试过用这种方式调整 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()

【讨论】:

  • 谢谢,做了类似于我做的事情 filepath = ' '.join(list)
猜你喜欢
  • 2018-07-17
  • 2014-03-09
  • 1970-01-01
  • 1970-01-01
  • 2017-02-19
  • 1970-01-01
  • 2011-01-03
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多