我正在研究一个程序,该程序会搜索数据库中的所有文件,并根据文件名中的数字(从001到100)对它们进行分组。注册前识别前导零?
唯一的问题是,python将'001'解释为'1',但'001'是文件名中的确切数字,并且由于我使用正则表达式来搜索它并不能识别数字我想要的方式。
真的很感谢一些帮助!这里是我到目前为止的代码:
import sys
import os
import re
import glob
time_data = open("time_data.txt", "w")
space_data = open("space_data.txt", "w")
folder_list = ['/Users/fenyolab/Downloads/root images/pet week img seq - removed 621 and after - ch1 registered', 'C:/Users/fenyolab/Downloads/root images/0329 to 033116 - WERSCR regen - STELLAR - registered', 'C:/Users/fenyolab/Downloads/root images/0406 to 040816 - H2BIAAWOX regen - GOOD - pt II - REGISTERED']
def stack_at_time_point(direc, time_point):
time_list = []
for x in glob.glob('%s/*' % direc):
if re.search("t.*%s_z" % time_point, x) != None and re.search('_c1.*', x) != None:
time_list.append(x)
for i in time_list:
time_data.write("%s\n" % i)
def stack_at_zlocation(direc, location):
location_list = []
for x in glob.glob('%s/*' % direc):
if re.search("_z.*%s_." % location, x) != None and re.search('_c1.*', x) != None:
location_list.append(x)
for i in location_list:
space_data.write("%s\n" % i)
for i in folder_list:
for x in xrange(100):
stack_at_zlocation(i, x)
space_data.write("\n\n\n")
stack_at_time_point(i, x)
time_data.write("\n\n\n")
space_data.close()
time_data.close()
print "Done."
正则表达式"_z.*%s_." % location
将匹配到_z023_
如果指定的位置是23,但如果指定的位置是1,程序将返回_z001_, _z011_, _z021_, _z031_, _z041_ ... _z091_.
字母'z'后面跟着一个三位数,零填充的数字? –
是的!不幸的是,这就是文件给我的方式,而且有数以千计的手动重命名。 –
在这种情况下,@Robᵩ指出使用'%03d'而不是'%s'。 –