質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
ファイル

ファイルとは、文字列に基づいた名前又はパスからアクセスすることができる、任意の情報のブロック又は情報を格納するためのリソースです。

コピー

元のオブジェクトを破壊することなく、オブジェクトの複製を生成することをコピーと呼びます。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

1回答

1135閲覧

python:shutil.copy(src, dst)で複製されたファイルのメタデータについて

daichiddd

総合スコア9

ファイル

ファイルとは、文字列に基づいた名前又はパスからアクセスすることができる、任意の情報のブロック又は情報を格納するためのリソースです。

コピー

元のオブジェクトを破壊することなく、オブジェクトの複製を生成することをコピーと呼びます。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2021/12/23 09:11

前提・実現したいこと

python,openpyxlを用いてExcel作業の自動化について取り組んでいます。

shutil.copy()で複製されたファイルの更新時間について分からない所があるので質問させていただきます。

shutil.copy(src,dst)で複製したファイルなのですが、公式ドキュメントにはメタデータは複製されないとの記載がありましたが(参照:https://docs.python.org/ja/3/library/shutil.html)、実際に複製したファイルの更新日時は処理実行時間になっていました。

メタデータにはファイルの作成時間や更新時間などはコピーされないとの記載だったのですが、実際の処理と違っているため、困惑しております。

何かご存じの方、この問題について教えていただけると幸いです。よろしくお願いいたします。

該当のソースコード

import shutil import sys import datetime import os print(sys.version) orig_file_path = r"C:\Users\Desktop\EMBサーバ\BAK\入替プログラム用文書_26_ver1.3.xlsx" dst = r"C:\Users\Desktop" shutil.copy(orig_file_path, dst) copy_file_path = r"C:\Users\Desktop\入替プログラム用文書_26_ver1.3.xlsx" t_orig = os.path.getmtime(orig_file_path) t_copy = os.path.getmtime(copy_file_path) d_orig = datetime.datetime.fromtimestamp(t_orig) d_copy = datetime.datetime.fromtimestamp(t_copy) print(d_orig) print(d_copy)

実行結果

3.8.5 (default, Sep 3 2020, 21:29:08) [MSC v.1916 64 bit (AMD64)] 2021-10-20 16:14:39.162039 2021-12-23 18:07:09.883213

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

tiitoi

2021/12/23 09:22

> メタデータにはファイルの作成時間や更新時間などはコピーされない どこに書いてありますか? > Windowsでは、ファイルオーナー、ACL、代替データストリームがコピーされません。 とは書いてありますが、更新日時などは含まれていないのでコピーされる挙動でもおかしくないと思います
daichiddd

2021/12/23 09:27

>どこに書いてありますか? ディレクトリとファイルの操作_shutil.copyの欄に書いてあります。以下コピペです。 shutil.copy(src, dst, *, follow_symlinks=True) ファイル src をファイルまたはディレクトリ dst にコピーします。 src と dst は両方共 term:path-like object または文字列でなければなりません。 dst がディレクトリを指定している場合、ファイルは dst の中に、 src のベースファイル名を使ってコピーされます。新しく作成したファイルのパスを返します。 follow_symlinks が偽で、 src がシンボリックリンクの場合、 dst はシンボリックリンクとして作成されます。 follow_symlinks が真で src がシンボリックリンクの場合、 dst には src のリンク先のファイルがコピーされます。 copy() はファイルのデータとパーミッションをコピーします。 (os.chmod() を参照) その他の、ファイルの作成時間や変更時間などのメタデータはコピーしません。 コピー元のファイルのメタデータを保存したい場合は、 copy2() を利用してください。
daichiddd

2021/12/23 09:29 編集

メタデータはファイルの更新時間については含まないとの理解でよろしいのでしょうか。
tiitoi

2021/12/23 09:37 編集

ファイルコピーは OS 依存の処理になりますので、OS によってメタデータの定義やコピー時の挙動も変わってきます。ドキュメントが実際の挙動を厳密に表しているとは限らないので、最終的には、実際に実行した際に得られた結果がすべてだと思います。 Windowsでは更新日時やファイル作成日時は copy() を実行したときの時刻になる仕様であったと思います。この仕様でなにか不都合がおきているのでしょうか?
guest

回答1

0

ベストアンサー

コピーされないから、コピー実行時の時刻になっています。

投稿2021/12/23 09:30

otn

総合スコア84505

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

daichiddd

2021/12/23 09:36

回答ありがとうございます。 全くその通りです。 日本語の勉強から始めたいと思います。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問