2013-09-10 1 views
0

У меня много файлов .txt с именами, начинающимися с «read», которые я хочу переименовать. Я хочу, чтобы они были названы с первой строкой в ​​файле. Я действительно паршивый программист, но я дал ему уйти, и теперь я застрял.Переименовать файлы .txt в первую строку в файле?

import os 
for filename in os.listdir("."): 
    if filename.startswith("read"): 
     for line in filename: 
     os.rename(filename, line) 

На данный момент скрипт не делает ничего, и даже если он работал, я уверен, что эти файлы не будут держать их расширения.

Любая помощь будет принята с благодарностью, спасибо.

ответ

0

Вам необходимо открыть файл, чтобы получить первую строку от него. for line in filename - это цикл, который выполняет итерацию над именем файла, а не содержимым файла, так как вы не открыли фактический файл.

Также for-loop предназначен для итерации по всему файлу, и вы хотите только первую строку.

И наконец, строка из текстового файла включает символ конца строки ('\n'), поэтому вам нужно, чтобы .strip(), что вне.

import os 
for filename in os.listdir("."): 
    if filename.startswith("read"): 
     with open(filename) as openfile: 
     firstline = openfile.readline() 
     os.rename(filename, firstline.strip()) 

надежда, что помогает

+0

Спасибо это своего рода работы. Остается проблема с расширением файла. Новая проблема теперь связана с нелегальными символами в имени файла (в основном «и :) любым простым способом их вырезания – user2766567

0

Что делать, если вы заменили свой внутренний цикл с чем-то вроде:

if not filename.startswith("read"): continue 
base, ext = os.path.splitext(filename) 
with open(filename, 'r') as infile: 
    newname = infile.next().rstrip() 
newname += ext 
os.rename(filename, newname) 
+0

Это дает мне синтаксическую ошибку« продолжить »не правильно в цикле. – user2766567

+0

Вам нужно поместить этот код в' для filename - os.listdir() 'loop ... – wflynny

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