Skip to main content

How to Save User Input to a File in Python

Saving user input to a file is a common task in interactive applications.

This guide explores various methods for achieving this in Python, covering basic writing, appending, and handling filenames dynamically using the open() function and with statements.

Saving User Input to a File

The most straightforward approach to save user input to a file is using a with open() statement, which ensures proper file handling and closing.

file_name = 'example.txt'
with open(file_name, 'w', encoding='utf-8') as my_file:
my_file.write(input('Your message: '))
  • The file is opened using open() in write mode ('w') with UTF-8 encoding, and assigned to the variable my_file.
  • The input() function prompts the user for input, and the my_file.write() method writes the input directly to the file.
  • The with statement ensures that the file will be properly closed, even if an error occurs during the process.

Appending User Input to a File

To append new input to the end of an existing file (or create the file if it does not exist), open the file in append mode ('a+'):

file_name = 'example.txt'
with open(file_name, 'a+', encoding='utf-8') as my_file:
my_file.write(input('Your message: ') + '\n')
  • The a+ mode opens the file for appending (and reading), and creates the file if it does not exist.
  • A newline character \n is added at the end of the line to ensure that multiple inputs end up on different lines, rather than in one single line.

Dynamic Filename Input from User

To allow the user to specify the output filename, use input() to prompt for the filename and then create the file:

file_name = input('Filename with extension, e.g. example.txt: ')
with open(file_name, 'w', encoding='utf-8') as my_file:
my_file.write(input('Your message: '))
  • This approach prompts the user for the desired filename and extension, making the code more flexible and user-friendly.

Avoiding Explicit close() Calls

You might see older code that opens and closes files explicitly:

file_name = 'example.txt'
f = open(file_name, 'w', encoding='utf-8')
f.write(input('Your message: '))
f.close()
note

This approach is error-prone as if an exception occurs before f.close() is called, the file won't be properly closed.

It is best practice to always use the with statement, as it automatically closes the file, avoiding potential issues:

file_name = 'example.txt'
with open(file_name, 'w', encoding='utf-8') as my_file:
my_file.write(input('Your message: '))