2015-08-29 2 views
1

У меня есть два файла (Running-2015-01-01.txt и Running-2015-01-02.txt) с информацией о имени узла устройства для каждого файла. Моя цель - переименовать эти файлы с удалением «Запуск» и заменить его на имя хоста устройства из содержимого файла.Как использовать содержимое файла для переименования нескольких файлов

Это то, что у меня есть до сих пор. Переводчик не показывает какую-либо ошибки, но ничего не происходит с целевыми файлами:

for filename in glob.glob("Running*"): 
    selected_file = open(filename, "r").readlines() 
    for i, s in enumerate(filename): 
     if "hostname" in filename: 
      hostname_file = str(filename[i][8:]).strip() 
      os.rename(filename, hostname_file + filename[7:]) 

Я также создал отдельные функции для переименования файла и собирать информацию содержимого из файла, и они работают.

собирать информацию от содержимого файла

def collect_string(): 
    filename = raw_input("Enter your filename : ") 
    selected_file = open(filename, "r") 
    line = selected_file.readlines() 
    date_time = datetime.datetime.now().strftime("%Y-%m-%d") 

    for i, s in enumerate(line): 
     if "hostname" in s: 
      output = str(line[i][8:]).strip() 
      print output 

переименования файла

def rename_file(): 
    for filename in os.listdir("."): 
     if filename.startswith("Running"): 
      os.rename(filename, "Config" + filename[6:]) 

ответ

0

В вашей collect_string функции вы проверить, если «имя хоста» находится в строках файла, который работает. В вашей первой функции вы проверяете, находится ли она в имени файла, что, конечно же, не работает.

Кроме того, вам не нужно использовать enumerate. Вы можете легко перебирать список с помощью синтаксиса for element in myList, как в вашей функции rename_file.

Наконец, чтобы избежать путаницы, я предлагаю использовать более ясные имена переменных.

Вот ваш код фиксированной (но не тестировалось):

def rename(): 
    for filename in glob.glob("Running*"): 
    newName=collect_hostname(filename)+ filename[7:] 
    os.rename(filename,newName) 

def collect_hostname(filename) 
    with open(filename) as f:  #best practice to open a file 
     for line in f: 
     if "hostname" in line: 
      return line[8:].strip() #line is already a string, no need for str 
+0

Привет, спасибо, это работает – nanto

 Смежные вопросы

  • Нет связанных вопросов^_^