質問編集履歴

3

発生している問題を更新

2023/05/04 02:54

投稿

izuki_y
izuki_y

スコア65

test CHANGED
File without changes
test CHANGED
@@ -11,11 +11,13 @@
11
11
 
12
12
  ### 前提
13
13
 
14
- pythonでなシステムを作っています。
14
+ pythonでなシステムを作っています。日付箇所のフォルダ名が更新されない
15
- 結果がおかしい
16
15
 
17
16
  ### 発生している問題・エラーメッセージ
18
- 開始日のフォルダ名が更新されてない
17
+ 開始日、終了日のフォルダ名が更新されてない
18
+ 単純に不等号で比較しただけだと判定できないっぽい。
19
+
20
+ なんか良い方法が無いか教えて下さい
19
21
 
20
22
  ### 該当のソースコード
21
23
 

2

ソース更新

2023/05/04 02:34

投稿

izuki_y
izuki_y

スコア65

test CHANGED
File without changes
test CHANGED
@@ -15,13 +15,7 @@
15
15
  結果がおかしい
16
16
 
17
17
  ### 発生している問題・エラーメッセージ
18
- 最後のファイルが、フォルダ名にリネームされておりまする
18
+ 開始日のフォルダ名が更新されてない
19
-
20
- 使用前
21
- ![イメージ説明](https://ddjkaamml8q8x.cloudfront.net/questions/2023-05-04/8c2c2319-d5dc-4b3f-b1c5-a62897c08c71.jpeg)
22
-
23
- 使用後
24
- ![イメージ説明](https://ddjkaamml8q8x.cloudfront.net/questions/2023-05-04/ae4a6063-bc78-4168-89fe-4f4852319a22.jpeg)
25
19
 
26
20
  ### 該当のソースコード
27
21
 
@@ -34,39 +28,40 @@
34
28
  import glob
35
29
 
36
30
  #フォルダ内のフォルダパスを取得
37
- currentDir = os.getcwd()
31
+ curpathDir = os.getcwd()
38
- folders = glob.glob(os.path.join(currentDir, '*'))
32
+ folders = glob.glob(os.path.join(curpathDir, '*'))
39
- #print("current="+currentDir)
33
+ #print("curpath="+curpathDir)
40
34
 
41
35
  #前回フォルダ名を初期化する([アカウント名]-[開始日]-[終了日]-media)
42
- prev = ['xxxx', '9999999999999999999(999999999999999)','0000000000000000000(000000000000000)','media']
36
+ prevpath = ['xxxx', '9999999999999999999(999999999999999)','0000000000000000000(000000000000000)','media']
43
- current = ['xxxx', '9999999999999999999(999999999999999)','0000000000000000000(000000000000000)','media']
37
+ curpath = ['xxxx', '9999999999999999999(999999999999999)','0000000000000000000(000000000000000)','media']
44
- new = ['xxxx', '9999999999999999999(999999999999999)','0000000000000000000(000000000000000)','media']
38
+ newpath = ['xxxx', '9999999999999999999(999999999999999)','0000000000000000000(000000000000000)','media']
45
39
 
46
40
  #for文で全部のフォルダを確認
47
41
  for folder in folders:
48
42
  #"-"でセパレートする
49
- current = folder.split('-')
43
+ curpath = folder.split('-')
50
44
 
51
45
 
52
46
  #前回アカウント名と同じかを比較する
53
- if bool(prev[0] == current[0]) :
47
+ if bool(prevpath[0] == curpath[0]) :
54
48
  # アカウントが同じなら現在のフォルダ→前のフォルダにファイルを移動する
55
- new = prev
49
+ newpath = prevpath
56
50
  for p in os.listdir(folder):
51
+ print("-".join(prevpath))
57
- shutil.move(os.path.join(folder, p), "-".join(prev))
52
+ shutil.move(os.path.join(folder, p), "-".join(prevpath))
58
53
 
59
54
  #開始日を比較してを保持
60
- if prev[1] > current[1]:
55
+ if prevpath[1] > curpath[1]:
61
- new[1] = current[1]
56
+ newpath[1] = curpath[1]
62
57
  #終了日を比較して新しい方を保持
63
- if prev[2] < current[2]:
58
+ if prevpath[2] < curpath[2]:
64
- new[2] = current[2]
59
+ newpath[2] = curpath[2]
65
-
60
+ prevpath = newpath
66
- if bool(new != prev):
61
+ if bool(newpath != prevpath):
67
- #日付に変更がある場合はフォルダ名を変更してnew → prev情報をコピー
62
+ #日付に変更がある場合はフォルダ名を変更してnewpath → prevpath情報をコピー
68
- os.rename(folder, "-".join(new))
63
+ os.rename(folder, "-".join(newpath))
69
- prev = new
64
+
70
65
 
71
66
  #日付に変更がない場合は何もしない
72
67
 
@@ -74,7 +69,7 @@
74
69
  os.removedirs(folder)
75
70
  else:
76
71
  #前回アカウント名と異なる場合は前回フォルダ名を更新して終わる
77
- prev = current
72
+ prevpath = curpath
78
73
 
79
74
  #終わり
80
75
 

1

コードを修正、その結果も修正

2023/05/04 01:34

投稿

izuki_y
izuki_y

スコア65

test CHANGED
File without changes
test CHANGED
@@ -12,33 +12,16 @@
12
12
  ### 前提
13
13
 
14
14
  pythonでなシステムを作っています。
15
- ファイル移動中に以下のエラーメッセージ発生ました。
15
+ 結果おか
16
16
 
17
17
  ### 発生している問題・エラーメッセージ
18
+ 最後のファイルが、フォルダ名にリネームされておりまする
18
19
 
19
- ```
20
- D:\新しいフォルダ (2)>C:\Users\user\Desktop\test.py
21
- srcD:\新しいフォルダー (2)\Yaiko084-1184062056934174720(20191015_200247)-1411619213513428993(20210704_183341)-media\
22
- dstD:\新しいフォルダー (2)\Yaiko084-1083343855116738560(20190110_214437)-1411619213513428993(20210704_183341)-media\
23
- Traceback (most recent call last):
24
- File "C:\Users\user\AppData\Local\Programs\Python\Python38\lib\shutil.py", line 788, in move
25
- os.rename(src, real_dst)
26
- OSError: [WinError 123] ファイル名、ディレクトリ名、またはボリューム ラベルの構文が間違っています。: 'D:\\新しいフォルダー (2)\\Yaiko084-1184062056934174720(20191015_200247)-1411619213513428993(20210704_183341)-media\\*' -> 'D:\\新しいフォルダー (2)\\Yaiko084-1083343855116738560(20190110_214437)-1411619213513428993(20210704_183341)-media\\*'
20
+ 使用前
21
+ ![イメジ説明](https://ddjkaamml8q8x.cloudfront.net/questions/2023-05-04/8c2c2319-d5dc-4b3f-b1c5-a62897c08c71.jpeg)
27
22
 
28
- During handling of the above exception, another exception occurred:
29
-
30
- Traceback (most recent call last):
31
- File "C:\Users\user\Desktop\test.py", line 36, in <module>
32
- shutil.move(file+"\\*", "-".join(prev))
33
- File "C:\Users\user\AppData\Local\Programs\Python\Python38\lib\shutil.py", line 802, in move
34
- copy_function(src, real_dst)
23
+ 使用後
35
- File "C:\Users\user\AppData\Local\Programs\Python\Python38\lib\shutil.py", line 432, in copy2
36
- copyfile(src, dst, follow_symlinks=follow_symlinks)
37
- File "C:\Users\user\AppData\Local\Programs\Python\Python38\lib\shutil.py", line 261, in copyfile
38
- with open(src, 'rb') as fsrc, open(dst, 'wb') as fdst:
39
- OSError: [Errno 22] Invalid argument: 'D:\\新しいフォルダー (2)\\Yaiko084-1184062056934174720(20191015_200247)-1411619213513428993(20210704_183341)-media\\*'
24
+ ![イメージ説明](https://ddjkaamml8q8x.cloudfront.net/questions/2023-05-04/ae4a6063-bc78-4168-89fe-4f4852319a22.jpeg)
40
-
41
- ```
42
25
 
43
26
  ### 該当のソースコード
44
27
 
@@ -52,41 +35,49 @@
52
35
 
53
36
  #フォルダ内のフォルダパスを取得
54
37
  currentDir = os.getcwd()
55
- files = glob.glob(os.path.join(currentDir, '*'))
38
+ folders = glob.glob(os.path.join(currentDir, '*'))
56
39
  #print("current="+currentDir)
57
40
 
58
41
  #前回フォルダ名を初期化する([アカウント名]-[開始日]-[終了日]-media)
59
42
  prev = ['xxxx', '9999999999999999999(999999999999999)','0000000000000000000(000000000000000)','media']
43
+ current = ['xxxx', '9999999999999999999(999999999999999)','0000000000000000000(000000000000000)','media']
44
+ new = ['xxxx', '9999999999999999999(999999999999999)','0000000000000000000(000000000000000)','media']
60
45
 
61
46
  #for文で全部のフォルダを確認
62
- for file in files:
47
+ for folder in folders:
63
48
  #"-"でセパレートする
64
- current = file.split('-')
49
+ current = folder.split('-')
50
+
65
51
 
66
- #前回アカウント名と同じかを比較する
52
+ #前回アカウント名と同じかを比較する
67
53
  if bool(prev[0] == current[0]) :
54
+ # アカウントが同じなら現在のフォルダ→前のフォルダにファイルを移動する
55
+ new = prev
56
+ for p in os.listdir(folder):
57
+ shutil.move(os.path.join(folder, p), "-".join(prev))
58
+
68
59
  #開始日を比較してを保持
69
60
  if prev[1] > current[1]:
70
- prev[1] = current[1]
61
+ new[1] = current[1]
71
62
  #終了日を比較して新しい方を保持
72
63
  if prev[2] < current[2]:
73
- prev[2] = current[2]
64
+ new[2] = current[2]
74
65
 
66
+ if bool(new != prev):
67
+ #日付に変更がある場合はフォルダ名を変更してnew → prev情報をコピー
75
- #print("-".join(prev))
68
+ os.rename(folder, "-".join(new))
69
+ prev = new
76
70
 
77
- #[アカウント名]-[(古い)開始日]-[(新しい)終了日]-mediaのフォルダを作ってファイルを移動する
78
- os.makedirs("-".join(prev), exist_ok=True)
79
- print("src"+file+"\\")
71
+ #日付に変更がない場合は何もしない
80
- print("dst"+"-".join(prev)+"\\")
72
+
81
- shutil.move(file+"\\*", "-".join(prev))
82
73
  #現在のフォルダを削除する
83
- os.removedirs(file)
74
+ os.removedirs(folder)
84
- #前回のフォルダ名を更新する[アカウント名]-[(古い)開始日]-[(新しい)終了日]-mediaのフォルダ
85
75
  else:
86
76
  #前回アカウント名と異なる場合は前回フォルダ名を更新して終わる
87
77
  prev = current
88
78
 
89
79
  #終わり
80
+
90
81
  ```
91
82
 
92
83
  ### 補足情報(FW/ツールのバージョンなど)