簡體   English   中英

打印文件名稱

[英]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....
  1. sorted()函數用於對文件名列表進行排序,然后將其存儲到f(f是file_list的排序版本)

  2. key參數是一個函數,它接受一個參數並輸出一個可排序的對象(即strintlist ...),它用於定義它用於排序的鍵。

  3. lambda是一個接受參數'x'的匿名函數,它的工作方式與def NoName(x): return something

  4. 使用re.findall查找與正則表達式匹配的所有子字符串,在這種情況下,只有一個匹配[即。 'abc123.txt'將返回[123] ]

  5. '\\d+\\.txt$'是一個正則表達式, \\d+ - 任何重復一次或多次的數字, \\. 是一個常規點. 因為通常在正則表達式中,所以前面有一個\\ . 具有它代表任何角色的特殊含義, \\它逃脫它,使它只是一個常規. txt是在給定位置匹配的字符串, $是表示僅匹配字符串末尾的符號。

  6. os.path.basename()用於檢索基本名稱(路徑的最后部分[即'abc123.txt''\\a\\b\\c\\abc123.txt' ])

  7. 因為re.findall()總是返回一個列表所以要檢索唯一的匹配將涉及使用[0](即。 ['123',][0] => '123'

  8. 因為檢索的數據是一個字符串,必須使用int()將其更改為int進行比較。 int是傳遞給#2中key

  9. 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

https://docs.python.org/3/library/os.path.html

https://docs.python.org/3/tutorial/

就這樣:

f = glob.glob('/fulldirectory/*.txt')

for files in f:
    print files.split('\\')[-1].split('.')[0]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM