2015-02-23 148 views
0

我是Python新手,想要在while循環中使用自動完成變量。我試着舉一個最簡單的例子。讓我們假設我有我的文件夾中的以下文件,各自開始用相同的字母和越來越多的,但文件名末尾只是由隨機數Python自動完成變量名稱

a_i=1_404 
a_i=2_383 
a_i=3_180 

我要像

while 1 <= 3: 
    old_timestep  = 'a_i=n_*' 
    actual_timestep = 'a_i=(n+1)_*' 
    ... (some functions that need the filenames saved in the two above initialised variables) 
    n = n+1 
while循環

因此,如果我啓動循環,我希望它自動處理我的目錄中的所有文件。因此,有兩個問題:

1)我如何告訴python(在我的例子中我使用了'*')我想要自動完成文件名?

2)如何使用文件名內的公式(在我的例子中'(n + 1)')?

非常感謝提前!

回答

0

我找到了一種方法,首先做一個解決1)我自己)然後b):

1)),以便只有所述第一X字符左截斷的文件名:

for i in {1..3}; do 
    cp a_i=$((i))_* a_i=$((i)) 
done 

B)

n = 1 
while n <= 3: 
    old = 'a_i=' + str(n) 
    new = 'a_i=' + str(n+1) 

的STR()被用於將整數n到字符串中的爲了連接 感謝您的意見!

1

1)據我所知,你不能自動做到這一點。我將存儲所有文件名在列表中的目錄,然後通過該列表

from os import listdir 
from os.path import isfile, join 
dir_files = [ f for f in listdir('.') if isfile(join('.',f)) ] 
while i <= 3: 
    old_timestep = "a_i=n_" 
    for f in dir_files: 
     if f.startswith(old_timestep): 
      # process file 
    i += 1 

2)您可以使用字符串連接

f = open("a_i=" + str(n + 1) + "remainder of filename", 'w') 
0

可以使用glob模塊做*擴張做搜索:

import glob 
old = next(glob.glob('a_i={}_*'.format(n))) 
actual = next(glob.glob('a_i={}_*'.format(n + 1))) 
+0

我獲得以下錯誤信息: 「」 「」 回溯(最後最近一次調用): 文件 「script.py」 34行,在 surf_sol_old =下一個(glob.glob('A_I = {} _ * '.format(o_timer))) ValueError:零長度字段名格式「」「」 – Jan 2015-02-23 12:20:02

+0

使用更新版本的python – Arthur 2015-02-23 13:37:47