Мне нужно скопировать файл в подкаталог с его именем, измененным на name_timestamp (добавив отметку времени).

Я использую COPY method для файла CSV, и как только эта копия будет готова, мне нужно переместить файл CSV в подкаталог и переименовать его в CSV_timestamp.

Ниже приведен пример кода. Может кто-нибудь помочь мне или предложить мне, как это сделать?

 import os, shutil, time

 if not os.path.exists(dirName):
    os.mkdir(dirName)
    print("Directory " , dirName ,  " Created ")
 else:    
    print("Directory " , dirName ,  " already exists")

def copyFile(src, dest):
    try:
        shutil.copy(src, dest)
    # eg. src and dest are the same file
    except shutil.Error as e:
        print('Error: %s' % e)
    # eg. source or destination doesn't exist
    except IOError as e:
        print('Error: %s' % e.strerror)

os.rename("path/to/current/age.csv", "path/to/new/destination/for/age.csv")
shutil.move("path/to/current/age.csv", "path/to/new/destination/for/age.csv")
0
Linu 28 Июн 2019 в 14:22

3 ответа

Лучший ответ

Придерживаясь вашего подхода (с помощью функции, которая проверяет, существует ли каталог и т. Д.), Вы можете сделать следующее:

import os
import shutil
from time import gmtime, strftime

def copyFile(old_path, new_directory):
   # check if the directory already exists
    if not os.path.exists(new_directory):
        os.mkdir(new_directory)
        print(f"Directory {new_directory} Created.")
    else:    
        print(f"Directory {new_directory} already exists.")

    # create new path from new_directory, the filename and the timestamp
    new_path = new_directory + old_path.split("/")[len(old_path)-1].split(".")[0] + strftime("%Y_%m_%d", gmtime()) + ".csv"

    # copy the file to the new path
    try:
        shutil.copy(old_path, new_path)
    # eg. src and dest are the same file
    except shutil.Error as e:
        print(f"Error: {e}")
    # eg. source or destination doesn't exist
    except IOError as e:
        print(f"Error: {e.strerror}")

old_path = '/path/to/directory/file.csv'
new_directory = '/path/to/new/directory/'

copyFile(old_path, new_directory)

Обратите внимание, что

  1. Начиная с Python 3.6, вы можете использовать f-строки для более простого включения переменных в строки.
  2. Мне не было ясно, какую временную метку вы ищете. Этот подход даст вам штамп в формате YYYY_MM_DD текущего дня, но вы можете легко это изменить, см. документация в пакете time.
  3. После использования shutil.copy вам больше не нужен shutil.move, так как первый уже скопировал ваш файл и сохранил его по назначению путь.
0
trotta 28 Июн 2019 в 11:53

Это должно быть так же просто, как указать путь к каталогу, в котором вы хотите, когда закончите.

Например, скажем, ваш файл находится в каталоге users / foo / bar / myfile.csv (это будет ваш src путь). Предположим, вам нужна копия этого файла в users / mydocuments / bar / foo / mynewfile.csv (это будет ваш dest путь).

Все, что вам нужно сделать, это:

import shutil
import os
src = 'users/foo/bar/myfile.csv'
tstamp = os.path.getmtime(path)
dest = 'users/mydocuments/bar/foo/mynewfile' + tstamp + '.csv'
shutil.move(src,dest)
0
trotta 28 Июн 2019 в 12:11

Вы можете использовать os.rename () вместо

import time
timestamp_name=int(time.time())
os.rename('path/to/file/name.text','path/to/file/'+timestamp_name+'.txt)
-1
div47 28 Июн 2019 в 11:41