Как использовать содержимое файла для переименования нескольких файлов

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

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

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:])

1 ответ

Решение

В вашем 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
Другие вопросы по тегам