看板 Python 關於我們 聯絡資訊
首先我是個超級小白 這是我目前弄出來的東西 f = open('11.txt',encoding = 'utf8') lines = f.readlines() print (lines[2]) 重命名還完全沒頭緒...之後再說... 首先有幾個問題 第1 11.txt只是其中一個檔案 一個一個改檔案名也太多了 我要如何自動處理多數檔案? 第2 我的py檔打算和txt放在一起 然後像bat檔一樣開啟後自動執行 有辦法嗎? 第3 有辦法保留執行畫面嗎? 像bat檔的pause 拜託各位幫忙了 感謝 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 114.41.70.16 ※ 文章網址: https://www.ptt.cc/bbs/Python/M.1512145298.A.AC3.html
BigBank: 1. os.walk() 2.3.看不太懂 寫bat檔執行python?12/02 01:02
2是我不太清楚python是如何執行的 所以希望像exe或bat開起就可以使用那樣 3是因為開py檔閃一下就消失了 和bat檔很像 而bat檔只要程式碼最後加入pause畫面就不會消失 ※ 編輯: s4028600 (114.41.70.16), 12/02/2017 01:17:24
s4028600: 查了一下os.walk看不懂 把os.walk放到open裡面?12/02 01:27
stucode: 1. os.walk() 2. os.getcwd() 後 os.walk()12/02 05:02
stucode: 3. input() 或者 os.system('pause')12/02 05:03
stucode: os.walk() 搭配 for ... in 使用。原 PO 如果沒有程式12/02 05:03
stucode: 基礎的話,建議先找個基本教學看到迴圈部分再回來寫。12/02 05:03
TitanEric: 我都用os.listdir 不過樓上們提到的方法也可以12/02 18:16
抱歉各位 os.walk那些真的看不懂也試不出 但是在找資料找到這個 看可不可行 import glob x=glob.glob('*.txt') print(x) f=open("x",encoding='utf8') lines = f.readlines() print (lines[2]) 雖然成功列出txt檔 但是無法輸入到open()中 ※ 編輯: s4028600 (114.41.70.16), 12/02/2017 21:57:03
stucode: glob 也可以,但它是傳回檔名 list,一樣要搭配 for 迴圈12/02 22:28
stucode: 來走訪每個檔案。12/02 22:29
danny0838: 可以翻翻官方文件 https://goo.gl/bbK5BC 裡面有範例12/02 23:10
danny0838: 右上角有搜尋按鈕,想知道任何 API 的用途及可用參數都 12/02 23:11
danny0838: 可以輸進去查。平常不記得網址只要Google搜python doc 12/02 23:11
danny0838: 前幾項就能找到官網。 12/02 23:11
danny0838: 如果英文還是有困難,也可以輸入中文關鍵字Google, 12/02 23:13
danny0838: 比如 "python 檔案更名"、"python 列出檔案" 不過中文 12/02 23:14
danny0838: 資料品質就不一定那麼好,另外也要注意python 2和3語法 12/02 23:14
danny0838: 不同,有些比較舊的文章是python 2,現在多半用python12/02 23:14
danny0838: 3,可能需要改一下程式碼才能用。12/02 23:15
stucode: 如果不知道現在用的是哪個版本,可以這樣確認:12/02 23:18
stucode: import sys12/02 23:19
stucode: print(sys.version)12/02 23:19
感謝danny的建議 只是我都找過了(除了英文真的看不懂) 其實我這個程式碼 也是拿別人的範例東拼西湊實驗出來的 又改了下比剛剛好一些 但是那個該死的open真的搞不定 頭痛啊 import glob for x in glob.glob('*.txt'): print(x) f=open('x',encoding='utf8') lines = f.readlines() print (lines[2]) ※ 編輯: s4028600 (114.41.70.16), 12/02/2017 23:22:39
stucode: open(x, ...) # x 不加括號。加括號的話會變成開啟檔名為 12/02 23:31
stucode: x 的檔案。另外 f=open() 跟針對檔案處理的每個動作都要 12/02 23:32
stucode: 縮排,Python 是以縮排來決定程式碼區塊的。 12/02 23:32
stucode: * 抱歉,我是要說不加引號。 12/02 23:37
s4028600: 行了 但是馬上出新問題... 只讀取最後一個檔案的第3行 12/03 00:01
s4028600: 只好再試試了 12/03 00:01
只讀取最後一個檔案的問題先放一邊 import glob,os for x in glob.glob('*.txt'): print(x) f=open(x,encoding='utf8') lines = f.readlines() print (lines[2]) os.rename(x,lines[2]) os.system("pause") 誰可以幫我測試一下 數據都是正確的 為什麼會無法更名 明明快完成了...好吐血... ※ 編輯: s4028600 (114.41.70.16), 12/03/2017 00:39:02
danny0838: 縮排先弄正確,如果還是出錯要貼錯誤訊息才能判斷12/03 01:02
danny0838: 一個可能原因是該行有某些字元不允許用於檔名12/03 01:02
danny0838: 你得想好遇到不能用於檔名的字元要怎麼處理 12/03 01:02
s4028600: 已經確定有兩個原因 一個是檔案被佔用 一個確實是字符 12/03 04:05
s4028600: 字元有點頭痛 很難刪除 12/03 04:06
s4028600: 但是不知道為什麼只讀取一個檔案很奇怪 是要用for嗎? 12/03 04:09
s4028600: 試不出編碼 12/03 04:09
stucode: 檔案佔用是因為開檔讀取後沒有關閉,兩個解決方法: 12/03 10:37
stucode: f.close() 或 with open(...) as f:12/03 10:37
stucode: 個人比較推薦後者,但前者對你來說可能比較好理解。12/03 10:37
stucode: readlines() 讀取的字串中包含換行字元 '\n',要用於重新12/03 10:38
stucode: 命名之前記得先裁掉(關鍵字:字串處理),其餘部分就是12/03 10:38
stucode: danny 大提到的檔案系統不接受的字元,這部分依照需求12/03 10:38
stucode: 處理方式不同,但一樣是做字串處理。只讀取最後一個檔案12/03 10:38
stucode: 的問題,請去 google Python 縮排,中文資料也不少。12/03 10:38
djshen: 你知道for loop怎麼用嗎?12/03 11:38
djshen: 你要不要一步一步來 1讀單一檔案 2拿到正確檔名 3 rename12/03 11:46
djshen: 4寫成loop形式12/03 11:47
djshen: 全部混在一起你自己也不知道哪裡出問題12/03 11:47
djshen: 沒人可以幫你測試 別人又沒有你的檔案12/03 11:48
s4028600: ok 感謝 現在只剩下4寫成loop形式 但是寫不出解法…12/03 14:48
s4028600: 縮排?都可以執行啊?12/03 14:54
import glob,os for x in glob.glob('*.txt'): print(x) #列出所有txt檔 f=open(x,encoding='utf8')#打開x lines = f.readlines() #讀取檔案 print (lines[2]) #列出第3行 y=lines[2].lstrip('<') #同下 z=y.rstrip() #同下 c=z.rstrip('>') #刪除不要字元 f.close() #關閉檔案 os.rename(x,c) #重新命名 我如果要迴圈執行"打開檔案"到"重新命名" 直到所有txt檔命名完要怎麼寫 ※ 編輯: s4028600 (125.230.131.184), 12/03/2017 15:46:49
s4028600: 空白鍵在手機ptt會不見 要整頁模式 12/03 15:59
youngman77: 你有把f=open之後的code都空四格嗎? 12/03 18:15
ncueBenson: python 的for 是用空格控制唷 所以你在for的:之後 12/03 20:24
ncueBenson: 有加上四格空格的都會在迴圈裡面 12/03 20:24
空格的沒有效果喔 不過突然成功了 雖然有無限迴圈的缺點... import glob,os while True: for x in glob.glob('*.txt'): print(x) #列出所有txt檔 f=open(x,encoding='utf8')#打開x lines = f.readlines() #讀取檔案 print (lines[2]) #列出第3行 y=lines[2].lstrip('<') #同下 z=y.rstrip() #同下 c=z.rstrip('>') #刪除無法命名字元 f.close() #關閉檔案 os.rename(x,c) #重新命名 無限迴圈停不下來... ※ 編輯: s4028600 (125.230.131.184), 12/03/2017 21:47:03
s4028600: 還好改名後不是txt檔12/03 21:47
stucode: while True: 拿掉,for 前面不要有空格。 12/03 22:38
雖然不知道為什麼 但是終於運轉成功了 import glob,os for x in glob.glob('*.txt'): print(x) #列出所有txt檔 txt=open(x,encoding='utf8')#打開x lines = txt.readlines() #讀取檔案 print (lines[2]) #列出第3行 a=lines[2].strip() #刪除 b=a.lstrip('<') #刪除從頭無法命名字元 c=b.rstrip('>') #刪除從尾無法命名字元 d=c.replace(':','') #刪除中間 e=d.replace('*','') #同上 f=e.replace('?','') #同上 txt.close() #關閉檔案 os.rename(x,f) #重新命名 os.system("pause") 雖然有重複檔名無法命名 跑出來的檔案要另外加txt的副檔名的一些缺點 那個刪除字元也相當困難 但是足夠我使用了 感謝各位的幫忙 這過程讓我知道 會寫程式的人真是厲害啊 其他的新手們也可以當作參考 感謝各位了 ※ 編輯: s4028600 (125.230.131.184), 12/03/2017 23:17:15