2016-03-17 5 views
-1

Я пытаюсь сделать функцию, которая принимает ввод пользователя, и переименовывает текстовый файл с этой строкой. Я пробовал open("%x.txt" % name, "w") и os.rename. Есть ли более эффективный способ, о котором я не знаю?переименование текстовых файлов с помощью пользовательского ввода в python 3

import os, sys, time 

def textfile(): 
    f = open("old.txt", "w") 
    x = input("name for your file: ") 
    os.rename("old.txt", "%x.txt) 
    f.write("This is a sentence") 
    f.close() 

textfile() 
+0

Более эффективен, как и быстрее? –

+0

Нет, извините, как в «работе». В результате он переименовывает файл «% x.txt», который, очевидно, не является целью –

ответ

2

Вы забыли на самом деле форматировать строку.

import os, sys, time 

def textfile(): 
    f = open("old.txt", "w") 
    x = input("name for your file: ") 
    os.rename("old.txt", "{}.txt".format(x)) 
    f.write("This is a sentence") 
    f.close() 

textfile() 
+0

Спасибо, мне должно было быть, что именно так вы форматируете строку. Я только что вернулся к python после изучения HTML5, js, css, ect. так что это была большая помощь. –

+0

Вы должны использовать метод 'str.format' в конечном итоге. У этого есть намного больше, чтобы предложить. –

0

Вам не нужно открывать файл, чтобы переименовать его. Как отметил @Bryan Oakely, os.rename - это способ сделать это в Python. Пример:

s = "old_name.txt" 
x = input("name for your file: ") 
os.rename(s,x+".txt") 

"old_name.txt" переименовывает к тому, что будет x (указанный пользователем) с .txt в качестве суффикса.

0

Хороший способ для того, чтобы избежать использования input() является:

import os, sys, time 

def textfile(): 
    x = raw_input("name for your file: ") 
    os.rename("old.txt", x + ".txt) 

textfile() 

Здесь у вас есть проблемы с безопасностью, так как вы не ограничиваете вход. Пользователь может добавить ../hello.txt и записать файл в другую папку. Или даже сделайте /etc/passwd и напишите файл, который вы, вероятно, не захотите.

+0

'input' в python3 отличается, он просто возвращает строки. –

+0

Вы правы. Я не видел, чтобы он использовал Python 3. Я отредактирую свой пост. Благодарю. – DaKnOb

0

Это будет работать:

import os 

def file_rename(): 
    oldname=input("Old name: ") #Get the old file name, don't forget the extention 
    newname=input("New name: ") #Get the new file name (excluding the extention) 
    os.rename(oldname,newname + ".txt") #Renames the file 

file_rename() #Calls the function above 

Это должно быть хорошо, если вы хотите переименовать различные файлы в том же каталоге, однако, если не просто установить Старое_имя ввод в строку, например, «example.txt ».

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