作者kiwistar (暴風雪之喀秋莎)
看板Python
標題[問題] Mac用程式改檔名改到檔案不見
時間Mon Aug 31 12:39:07 2020
最近整理謎片時有一堆需要重新命名的檔案
片名大概是ssni-157、ABP-990這樣
寫了一個程式去網站上爬出片名以後,再修改檔案名稱變成
"ABP-990 松岡すずの極上筆おろし 37 奇跡の淫女が2作目にして筆おろしセックスに
挑戦!"
這樣的完整名稱
程式碼如下:
https://bit.ly/2QU25ON
執行時我觀察到iterator一開始在遍歷檔案的時候會按照開頭字母順序,但只會先看大
寫的檔名(如:MIDE-765),小寫檔名的會被跳過(如apkh-131)。
後來就放著讓他跑,睡覺去了。醒來以後發現不太對,有些小寫字母開頭的檔案好像消
失了。對,沒錯!!直接被刪掉了!!
但又不是全部,有些小寫檔名的檔案是還在且有成功被重新命名的。
我在程式碼裡已經處理過大小寫的問題了,但求教各位大大為什麼檔案會消失呢?
----
Sent from
BePTT on my Google Pixel 4 XL
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 114.136.208.140 (臺灣)
※ 文章網址: https://webptt.com/m.aspx?n=bbs/Python/M.1598848771.A.9F0.html
1F:推 tsoahans: 有沒有可能video_name.text都抓到一樣的東西結果就覆寫08/31 13:03
2F:→ tsoahans: 掉 你應該先copy在rename比較保險08/31 13:04
3F:→ kiwistar: 我後來發現不只小寫檔案被刪除,確切來說有一部分的檔08/31 14:05
4F:→ kiwistar: 案消失了,但不知道是哪一些08/31 14:05
5F:推 TuCH: 連結怪怪的 打不開08/31 14:10
是看不到程式碼還是沒有連到github呢?
6F:→ TitanEric: 這個問題我想會需要檔案研究用08/31 16:54
8F:→ kiwistar: c400dbf746245d584b09f3b5c608/31 16:58
後來我發現硬碟空間結結實實地多了1TB,整個程式會操作到檔案的應該只有os.rename(),
因為我有發現從開頭字母來看,S開頭以後的檔案跟小寫開頭的檔案都消失了。
※ 編輯: kiwistar (114.136.208.140 臺灣), 08/31/2020 17:08:27
9F:→ OrzOGC: 這個問題我需要檔案來研究08/31 18:24
10F:推 HuangJC: 真了不起,寫程式做這種事 XDDDD08/31 23:49
11F:→ HuangJC: iteration 裡,很忌誨邊改邊遞歸你的指標,因為不可預測08/31 23:50
12F:→ HuangJC: 舉例來說,如果寫個 for loop 說要由前往後刪一個字串08/31 23:50
13F:→ HuangJC: 一開始刪 string[0], 接著刪 string[1], 你覺得對嗎?08/31 23:51
14F:→ HuangJC: 剛才的 [1] 現在跑到 [0] 了,你到底要對誰動作呢?邊走08/31 23:51
這樣會刪掉原本的0、2、4、6...?
可是我只是改檔名,而沒有改檔案。這樣應該不會影響指標?
我有注意到,中間有幾次程式出現錯誤,例如網路突然不穩導致預期的頁面沒有出來。但我重跑程式以後,它不會從頭iteration,而是會從上次跑到斷掉的地方繼續開始,還滿神奇的。
15F:→ HuangJC: 邊改無法厘清你的行為,必需把你所有檔案寄到我家試試..08/31 23:52
16F:→ HuangJC: 順便寄包衛生紙來,我怕家裡的不夠,謝謝..08/31 23:52
可以喔!寄一顆4TB給我,我幫你裝滿(誤
17F:→ TakiDog: 我寫了一個打番號自動查自動載再上傳雲端,我都不知道我09/01 00:03
自動載這個太厲害了...
18F:→ TakiDog: 在幹嘛..09/01 00:03
19F:→ TakiDog: 我建議不要拿片名當檔名,有時候特殊字或是太長之類的問09/01 00:04
20F:→ TakiDog: 題很多,我是在產生一個json存檔名09/01 00:04
我因為需要歸檔所以長久以來的習慣是用片名當檔名。在這次的程式有造成問題,就是片名有"/"就會錯誤。所以我又寫了一個if去把可能出現的"/"代換成空格QQ
※ 編輯: kiwistar (114.136.208.140 臺灣), 09/01/2020 02:31:13
21F:推 HuangJC: string 的例子你理解了?刪到 0,2,4,6 看來你是猜對了 09/01 05:26
22F:→ HuangJC: 可是你知道檔案的 iteration 是什麼原則嗎?萬一是檔名排 09/01 05:27
23F:→ HuangJC: 序,而你又改檔名,那造成的混亂比 string 還嚴重啊! 09/01 05:27
24F:→ HuangJC: 除非你針對檔案建立 handle,而後不管檔名如何改變, 09/01 05:28
25F:→ HuangJC: handle不變,否則要怎麼 iteration 這些檔? 09/01 05:28
26F:→ chickengod: 用檔名當 tag 用 id 當檔名 不然沒辦法避免奇怪字元 09/01 20:28
27F:→ chickengod: 的問題巴 說不定檔案沒不見 只是用 windows 檔案總管 09/01 20:29
28F:→ chickengod: 看不到 你裝 cygwin 去同個資料夾看看 09/01 20:30
29F:→ chickengod: 然後奇怪字元可以用 pat = re.compile(r'a|b', re.I) 09/01 20:50
30F:→ chickengod: pat.sub('', input_text) 一次取代多種奇怪字元 09/01 20:51
31F:→ chickengod: re.compile 放在迴圈外面 可以避免重複製造object 09/01 20:53
32F:推 Tenging: 借轉av版 09/02 19:00
33F:推 skyconquer: 大家超熱心WWWW 09/03 10:32
34F:→ kiwistar: 回C大,我的OS是mac。然後我可能會再用空的資料夾實驗 09/03 13:41
35F:→ kiwistar: 一下。處理特殊字元的確也很重要。 09/03 13:41
36F:推 HuangJC: 其實你該做的是 hit rate, 播放率統計,然後把不愛看的刪 09/04 01:14
37F:→ HuangJC: 掉.. 取檔名也該用自己的風格,比如人名系列,動作系列 09/04 01:15
38F:→ HuangJC: 重點是要方便你搜尋 09/04 01:15
39F:→ kiwistar: 我以前會刪不愛看的,後來我發現我常常一兩年後突然想 09/04 03:19
40F:→ kiwistar: 看當初被我刪掉過的片...後來就很少刪了,除非真的是o 09/04 03:19
41F:→ kiwistar: utliers 09/04 03:19
※ 編輯: kiwistar (223.137.126.59 臺灣), 09/04/2020 03:23:35
42F:推 stillcolor: 哈哈哈哈哈哈哈抱歉我從頭笑到尾!respect! 09/04 12:04
43F:推 wargods8402: 這有點難解釋 請先提供檔案 09/04 13:29
44F:推 TuCH: 我懷疑是資料的問題 可以提供資料我幫你檢查看看 09/04 14:08
45F:推 HuangJC: 用 move 到另一個子目錄的方法,目前這個子目錄漸漸清空 09/04 14:38
46F:→ HuangJC: 這樣就絕不會重覆處理;處理時從後往前,比如刪字串,如 09/04 14:38
47F:→ HuangJC: 如果你從最後一句往前刪,就不會有邊刪邊移動的問題 09/04 14:39
48F:→ HuangJC: 凡是 iter 的都適用這原則,由後往前都不會出事.. 09/04 14:39
49F:→ HuangJC: 不然就是有的 compiler 會檢查並提醒你必需先 copy 一份 09/04 14:40
50F:→ HuangJC: handle,以 copy 的運作,就不會邊刪邊移動,否則會跳出錯 09/04 14:40
51F:→ HuangJC: 誤訊息,通常用 consist 這字眼,指你的資料造成不一致.. 09/04 14:41
52F:推 Rmmct: 神 08/01 16:54