[英]Printing name off of file
f = glob.glob('/fulldirectory/*.txt')
for index, files in enumerate(f, 1):
r = open(files)
reader = csv.DictReader(r)
所以我試圖打印文件的實際名稱作為我的分析的一部分。
上面目錄中的每個文件都使用以下約定命名:R1.txt,R2.txt,R3.txt等。
目前我只是使用枚舉函數來打印數字 - 但這只能在假設目錄中沒有文件丟失的情況下工作。
編輯:
我嘗試過這個,但它沒有給我我想要的東西:
p = [int(s) for s in files if files.isdigit()]
print p
>[0,1]
>[0,2]
您可以只使用簡單的re.sub
將.txt
替換為空字符串。
import re, glob
f = glob.glob('/fulldirectory/*.txt')
for file in f:
print(re.sub('\.txt$', '', file))
r = open(file)
reader = csv.DictReader(r)
在理想的世界中,我會打印'index',在第一次迭代中,將打印R01。 然后是R02等
如果您希望它們始終處於有序狀態,請執行此操作以首先對文件名進行排序:
f = sorted(glob.glob('/fulldirectory/*.txt'))
如果您只想打印文件的基本名稱,則可以打印出來:
import os
print(re.sub('\.txt$', '', os.path.basename(file)))
注意:建議的其他方式可能不太安全,因為不建議在文件名上使用多個拆分。
這是OP提出的一個完整的例子,其中有一個很好的解釋:
import re, os, glob
file_list = glob.glob('/fulldirectory/*.txt') # get the list of file names that ends in .txt
f = sorted(file_list, key = lambda x: int(re.findall('\d+\.txt$',os.path.basename(x))[0]))
# 1 2 3 8 4 5 6 7
for file in f:
print(re.sub('\.txt$', '', file))
# 9
# do your stuff....
sorted()
函數用於對文件名列表進行排序,然后將其存儲到f(f是file_list的排序版本)
key
參數是一個函數,它接受一個參數並輸出一個可排序的對象(即str
, int
, list
...),它用於定義它用於排序的鍵。
lambda是一個接受參數'x'的匿名函數,它的工作方式與def NoName(x): return something
使用re.findall
查找與正則表達式匹配的所有子字符串,在這種情況下,只有一個匹配[即。 'abc123.txt'
將返回[123]
]
'\\d+\\.txt$'
是一個正則表達式, \\d+
- 任何重復一次或多次的數字, \\.
是一個常規點.
因為通常在正則表達式中,所以前面有一個\\
.
具有它代表任何角色的特殊含義, \\
它逃脫它,使它只是一個常規.
, txt
是在給定位置匹配的字符串, $
是表示僅匹配字符串末尾的符號。
os.path.basename()
用於檢索基本名稱(路徑的最后部分[即'abc123.txt'
的'\\a\\b\\c\\abc123.txt'
])
因為re.findall()
總是返回一個列表所以要檢索唯一的匹配將涉及使用[0](即。 ['123',][0]
=> '123'
)
因為檢索的數據是一個字符串,必須使用int()將其更改為int
進行比較。 int是傳遞給#2中key
。
re.sub('\\.txt$', '', file)
第一個參數是正則表達式,第二個參數是要替換它的字符串,第三個參數是需要替換的字符串(即re.sub('a', '', 'banana')
=> bnn
因為它取代了每a
沒有任何東西)檢查#5有關正則表達式的更多信息
如果您需要進一步澄清,請告訴我
替代的導入方法是:
import glob
from re import sub, findall
from os.path import basename
file_list = glob.glob('/fulldirectory/*.txt') # get the list of file names that ends in .txt
f = sorted(file_list, key = lambda x: int(findall('\d+\.txt$',basename(x))[0]))
for file in f:
print(sub('\.txt$', '', file))
# do your stuff....
有用的網址:
https://docs.python.org/3/library/re.html
就這樣:
f = glob.glob('/fulldirectory/*.txt')
for files in f:
print files.split('\\')[-1].split('.')[0]
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.