你循環都是錯誤的。蟒蛇是遠不止表現:
1)您可以通過啓動範圍在1跳過第一個元素:
for i in range(1, len(species_arr) - 4):
...然後使用i
,而不是你的i+1
內循環。
2)即使容易(更地道)是使用列表分片:
for species in species_arr[1:-4]:
3)您可以格式化使用format()方法在Python字符串。
這裏是採用那些概念的示例:
species_arr = [
"homo_sapiens",
"pan_troglodytes",
"pongo_abelii",
"gorilla_gorilla",
"macaca_mulatta",
"callithrix_jacchus",
"bos_taurus",
"canis_familiaris",
"equus_caballus",
"felis_catus",
"ovis_aries",
"sus_scrofa",
"oryctolagus_cuniculus",
"rattus_norvegicus",
"mus_caroli",
"mus_pahari",
"mus_musculus"
]
chop_from_end = 4
for species in species_arr[1:-chop_from_end]:
fname = "*{0}*".format(species)
print fname
--output:--
*pan_troglodytes*
*pongo_abelii*
*gorilla_gorilla*
*macaca_mulatta*
*callithrix_jacchus*
*bos_taurus*
*canis_familiaris*
*equus_caballus*
*felis_catus*
*ovis_aries*
*sus_scrofa*
*oryctolagus_cuniculus*
格式()方法在Python 3.0中引入 - 但它被反向移植到Python 2.6(在更有限的形式)。如果由於某種原因,你的安裝沒有格式()方法,你可以使用舊的方式:
fname = "*%s*" % species
查看其他格式()的例子在這裏:
https://docs.python.org/3/library/string.html#format-examples
4)這裏是什麼你可以用glob module
做:
import glob
import os.path
import pprint
base_dir = '/Users/7stud/python_programs/dir1'
names = ['a', 'b', 'c']
for name in names:
fname = "*{0}*".format(name)
path = os.path.join(base_dir, fname)
pprint.pprint(glob.glob(path))
print '-' * 20
--output:--
['/Users/7stud/python_programs/dir1/__pycache__',
'/Users/7stud/python_programs/dir1/a.txt',
'/Users/7stud/python_programs/dir1/aa.txt',
'/Users/7stud/python_programs/dir1/ab.txt',
'/Users/7stud/python_programs/dir1/ba.txt']
--------------------
['/Users/7stud/python_programs/dir1/ab.txt',
'/Users/7stud/python_programs/dir1/b.txt',
'/Users/7stud/python_programs/dir1/ba.txt']
--------------------
['/Users/7stud/python_programs/dir1/__pycache__']
--------------------
或者,作爲name, matches
雙的字典:
results = dict(
(
name,
glob.iglob(os.path.join(base_dir, "*{0}*".format(name)))
)
for name in names
)
for name, _iter in results.items():
print "{0}:".format(name)
pprint.pprint(list(_iter))
--output:--
a:
['/Users/7stud/python_programs/dir1/__pycache__',
'/Users/7stud/python_programs/dir1/a.txt',
'/Users/7stud/python_programs/dir1/aa.txt',
'/Users/7stud/python_programs/dir1/ab.txt',
'/Users/7stud/python_programs/dir1/ba.txt']
c:
['/Users/7stud/python_programs/dir1/__pycache__']
b:
['/Users/7stud/python_programs/dir1/ab.txt',
'/Users/7stud/python_programs/dir1/b.txt',
'/Users/7stud/python_programs/dir1/ba.txt']
請參閱http://stackoverflow.com/questions/3207219/how-to-list-all-files-of-a-directory-in-python – Urban48 2015-01-21 10:41:08
只使用fnmatch的glob也爲什麼使用'i + 1 「你不想要第一個? – 2015-01-21 10:43:22
我不想第一個。所有這些glob函數都只考慮了一個字符串,它不會在整個程序中改變。我正在尋找一個代碼,使我能夠找到一個文件名中的變量子字符串。 – 2015-01-21 10:46:57