[問題] 提取txt內文後重命名檔名

看板Python作者 (佑)時間6年前 (2017/12/02 00:21), 6年前編輯推噓2(2053)
留言55則, 8人參與, 6年前最新討論串1/1
首先我是個超級小白 這是我目前弄出來的東西 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

12/02 01:02, 6年前 , 1F
1. os.walk() 2.3.看不太懂 寫bat檔執行python?
12/02 01:02, 1F
2是我不太清楚python是如何執行的 所以希望像exe或bat開起就可以使用那樣 3是因為開py檔閃一下就消失了 和bat檔很像 而bat檔只要程式碼最後加入pause畫面就不會消失 ※ 編輯: s4028600 (114.41.70.16), 12/02/2017 01:17:24

12/02 01:27, 6年前 , 2F
查了一下os.walk看不懂 把os.walk放到open裡面?
12/02 01:27, 2F

12/02 05:02, 6年前 , 3F
1. os.walk() 2. os.getcwd() 後 os.walk()
12/02 05:02, 3F

12/02 05:03, 6年前 , 4F
3. input() 或者 os.system('pause')
12/02 05:03, 4F

12/02 05:03, 6年前 , 5F
os.walk() 搭配 for ... in 使用。原 PO 如果沒有程式
12/02 05:03, 5F

12/02 05:03, 6年前 , 6F
基礎的話,建議先找個基本教學看到迴圈部分再回來寫。
12/02 05:03, 6F

12/02 18:16, 6年前 , 7F
我都用os.listdir 不過樓上們提到的方法也可以
12/02 18:16, 7F
抱歉各位 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

12/02 22:28, 6年前 , 8F
glob 也可以,但它是傳回檔名 list,一樣要搭配 for 迴圈
12/02 22:28, 8F

12/02 22:29, 6年前 , 9F
來走訪每個檔案。
12/02 22:29, 9F

12/02 23:10, 6年前 , 10F
可以翻翻官方文件 https://goo.gl/bbK5BC 裡面有範例
12/02 23:10, 10F

12/02 23:11, 6年前 , 11F
右上角有搜尋按鈕,想知道任何 API 的用途及可用參數都
12/02 23:11, 11F

12/02 23:11, 6年前 , 12F
可以輸進去查。平常不記得網址只要Google搜python doc
12/02 23:11, 12F

12/02 23:11, 6年前 , 13F
前幾項就能找到官網。
12/02 23:11, 13F

12/02 23:13, 6年前 , 14F
如果英文還是有困難,也可以輸入中文關鍵字Google,
12/02 23:13, 14F

12/02 23:14, 6年前 , 15F
比如 "python 檔案更名"、"python 列出檔案" 不過中文
12/02 23:14, 15F

12/02 23:14, 6年前 , 16F
資料品質就不一定那麼好,另外也要注意python 2和3語法
12/02 23:14, 16F

12/02 23:14, 6年前 , 17F
不同,有些比較舊的文章是python 2,現在多半用python
12/02 23:14, 17F

12/02 23:15, 6年前 , 18F
3,可能需要改一下程式碼才能用。
12/02 23:15, 18F

12/02 23:18, 6年前 , 19F
如果不知道現在用的是哪個版本,可以這樣確認:
12/02 23:18, 19F

12/02 23:19, 6年前 , 20F
import sys
12/02 23:19, 20F

12/02 23:19, 6年前 , 21F
print(sys.version)
12/02 23:19, 21F
感謝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

12/02 23:31, 6年前 , 22F
open(x, ...) # x 不加括號。加括號的話會變成開啟檔名為
12/02 23:31, 22F

12/02 23:32, 6年前 , 23F
x 的檔案。另外 f=open() 跟針對檔案處理的每個動作都要
12/02 23:32, 23F

12/02 23:32, 6年前 , 24F
縮排,Python 是以縮排來決定程式碼區塊的。
12/02 23:32, 24F

12/02 23:37, 6年前 , 25F
* 抱歉,我是要說不加引號。
12/02 23:37, 25F

12/03 00:01, 6年前 , 26F
行了 但是馬上出新問題... 只讀取最後一個檔案的第3行
12/03 00:01, 26F

12/03 00:01, 6年前 , 27F
只好再試試了
12/03 00:01, 27F
只讀取最後一個檔案的問題先放一邊 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

12/03 01:02, 6年前 , 28F
縮排先弄正確,如果還是出錯要貼錯誤訊息才能判斷
12/03 01:02, 28F

12/03 01:02, 6年前 , 29F
一個可能原因是該行有某些字元不允許用於檔名
12/03 01:02, 29F

12/03 01:02, 6年前 , 30F
你得想好遇到不能用於檔名的字元要怎麼處理
12/03 01:02, 30F

12/03 04:05, 6年前 , 31F
已經確定有兩個原因 一個是檔案被佔用 一個確實是字符
12/03 04:05, 31F

12/03 04:06, 6年前 , 32F
字元有點頭痛 很難刪除
12/03 04:06, 32F

12/03 04:09, 6年前 , 33F
但是不知道為什麼只讀取一個檔案很奇怪 是要用for嗎?
12/03 04:09, 33F

12/03 04:09, 6年前 , 34F
試不出編碼
12/03 04:09, 34F

12/03 10:37, 6年前 , 35F
檔案佔用是因為開檔讀取後沒有關閉,兩個解決方法:
12/03 10:37, 35F

12/03 10:37, 6年前 , 36F
f.close() 或 with open(...) as f:
12/03 10:37, 36F

12/03 10:37, 6年前 , 37F
個人比較推薦後者,但前者對你來說可能比較好理解。
12/03 10:37, 37F

12/03 10:38, 6年前 , 38F
readlines() 讀取的字串中包含換行字元 '\n',要用於重新
12/03 10:38, 38F

12/03 10:38, 6年前 , 39F
命名之前記得先裁掉(關鍵字:字串處理),其餘部分就是
12/03 10:38, 39F

12/03 10:38, 6年前 , 40F
danny 大提到的檔案系統不接受的字元,這部分依照需求
12/03 10:38, 40F

12/03 10:38, 6年前 , 41F
處理方式不同,但一樣是做字串處理。只讀取最後一個檔案
12/03 10:38, 41F

12/03 10:38, 6年前 , 42F
的問題,請去 google Python 縮排,中文資料也不少。
12/03 10:38, 42F

12/03 11:38, 6年前 , 43F
你知道for loop怎麼用嗎?
12/03 11:38, 43F

12/03 11:46, 6年前 , 44F
你要不要一步一步來 1讀單一檔案 2拿到正確檔名 3 rename
12/03 11:46, 44F

12/03 11:47, 6年前 , 45F
4寫成loop形式
12/03 11:47, 45F

12/03 11:47, 6年前 , 46F
全部混在一起你自己也不知道哪裡出問題
12/03 11:47, 46F

12/03 11:48, 6年前 , 47F
沒人可以幫你測試 別人又沒有你的檔案
12/03 11:48, 47F

12/03 14:48, 6年前 , 48F
ok 感謝 現在只剩下4寫成loop形式 但是寫不出解法…
12/03 14:48, 48F

12/03 14:54, 6年前 , 49F
縮排?都可以執行啊?
12/03 14:54, 49F
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

12/03 15:59, 6年前 , 50F
空白鍵在手機ptt會不見 要整頁模式
12/03 15:59, 50F

12/03 18:15, 6年前 , 51F
你有把f=open之後的code都空四格嗎?
12/03 18:15, 51F

12/03 20:24, 6年前 , 52F
python 的for 是用空格控制唷 所以你在for的:之後
12/03 20:24, 52F

12/03 20:24, 6年前 , 53F
有加上四格空格的都會在迴圈裡面
12/03 20:24, 53F
空格的沒有效果喔 不過突然成功了 雖然有無限迴圈的缺點... 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

12/03 21:47, 6年前 , 54F
還好改名後不是txt檔
12/03 21:47, 54F

12/03 22:38, 6年前 , 55F
while True: 拿掉,for 前面不要有空格。
12/03 22:38, 55F
雖然不知道為什麼 但是終於運轉成功了 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
文章代碼(AID): #1Q8O6Ih3 (Python)