How to write to .txt files in Python 3
Categories:
Mastering File I/O: Writing to .txt Files in Python 3

Learn the essential techniques for writing text data to files in Python 3, covering basic operations, error handling, and best practices for robust file management.
Writing data to files is a fundamental operation in many programming tasks, from logging application events to saving user-generated content. Python 3 provides a straightforward and powerful way to interact with the file system, making it easy to write text data to .txt
files. This article will guide you through the core concepts and practical examples of file writing in Python, ensuring your data is stored correctly and efficiently.
Opening Files for Writing: The open()
Function
The primary function for interacting with files in Python is open()
. When writing to a file, you need to specify the file path and the mode in which you want to open the file. The most common modes for writing are:
'w'
(write mode): Opens the file for writing. If the file already exists, its contents are truncated (emptied). If the file does not exist, a new one is created.'a'
(append mode): Opens the file for appending. If the file exists, new data is written to the end of the file. If the file does not exist, a new one is created.'x'
(exclusive creation mode): Creates a new file and opens it for writing. If the file already exists, the operation fails with aFileExistsError
.
It's crucial to always close the file after you're done writing to it to ensure all data is flushed from the buffer and resources are released. Python's with
statement is the recommended way to handle files, as it automatically closes the file even if errors occur.
# Using 'w' mode (write - overwrites existing content)
with open('my_file.txt', 'w') as file:
file.write('Hello, Python!\n')
file.write('This is a new line.\n')
# Using 'a' mode (append - adds to existing content)
with open('my_file.txt', 'a') as file:
file.write('Appending this line.\n')
# Using 'x' mode (exclusive creation - raises error if file exists)
try:
with open('new_unique_file.txt', 'x') as file:
file.write('This file was created exclusively.\n')
except FileExistsError:
print('Error: new_unique_file.txt already exists!')
Examples of opening files in 'w', 'a', and 'x' modes.
with
statement when working with files. It ensures that the file is properly closed, even if exceptions occur during file operations, preventing resource leaks and data corruption.Writing Data: write()
and writelines()
Once a file is opened in a writable mode, you can use two primary methods to write data:
file.write(string)
: Writes a single string to the file. It does not automatically add a newline character, so you must include\n
explicitly if you want new lines.file.writelines(iterable_of_strings)
: Writes a sequence of strings (e.g., a list of strings) to the file. Likewrite()
, it does not add newline characters automatically, so each string in the iterable should typically end with\n
if you want them on separate lines.
data_to_write = 'First line.\nSecond line.\nThird line.'
with open('output.txt', 'w') as f:
f.write(data_to_write)
list_of_lines = [
'Line 1 from list\n',
'Line 2 from list\n',
'Line 3 from list\n'
]
with open('list_output.txt', 'w') as f:
f.writelines(list_of_lines)
print('Check output.txt and list_output.txt for content.')
Demonstrating write()
for a single string and writelines()
for a list of strings.
flowchart TD A[Start] --> B{Open File?} B -- Yes, 'w' --> C[Truncate/Create File] B -- Yes, 'a' --> D[Append to/Create File] B -- Yes, 'x' --> E{File Exists?} E -- No --> F[Create File] E -- Yes --> G[FileExistsError] C --> H[Write Data] D --> H F --> H H --> I[Close File] G --> I I --> J[End]
Flowchart illustrating different file opening modes for writing.
Handling Encoding and Buffering
By default, Python uses the system's default encoding (often UTF-8 on modern systems) when writing text files. However, it's good practice to explicitly specify the encoding, especially when dealing with international characters or when you need to ensure cross-platform compatibility. The encoding
parameter in open()
allows you to do this.
Buffering refers to how data is temporarily stored before being written to the physical disk. Python handles buffering automatically, but you can influence it with the buffering
parameter. For most text file operations, the default buffering is sufficient. If you need to ensure data is written immediately (e.g., for real-time logging), you can set buffering=1
for line-buffered mode, or buffering=0
for unbuffered (though this is generally not recommended for performance reasons).
# Writing with explicit UTF-8 encoding
with open('unicode_output.txt', 'w', encoding='utf-8') as file:
file.write('Hello, world in various languages:\n')
file.write('δ½ ε₯½ (Chinese)\n')
file.write('γγγ«γ‘γ― (Japanese)\n')
file.write('μλ
νμΈμ (Korean)\n')
# Writing with line buffering (data flushed on newline)
with open('log.txt', 'w', buffering=1) as log_file:
log_file.write('Log entry 1\n')
# This line is likely written to disk immediately due to newline
log_file.write('Log entry 2')
# This line might not be written until buffer is full or file is closed
log_file.flush() # Manually flush the buffer
log_file.write('Log entry 3 after flush\n')
Examples demonstrating explicit encoding and buffering control.
UnicodeEncodeError
. Always consider using encoding='utf-8'
for broad compatibility.1. Choose a File Mode
Decide whether you want to overwrite ('w'
), append ('a'
), or exclusively create ('x'
) the file based on your requirements.
2. Open the File Safely
Use the with open('filename.txt', 'mode', encoding='utf-8') as file:
statement to ensure the file is automatically closed and resources are managed.
3. Write Your Data
Use file.write(string)
for single strings or file.writelines(list_of_strings)
for multiple lines. Remember to include \n
for newlines.
4. Verify Content
After running your script, open the .txt
file with a text editor to confirm that the data has been written as expected.