Skip to main content

How to Read a File Until a Specific Character in Python

This guide describes how to read a file in Python up to a specific character. This is useful for parsing data where you only need a portion of the file or when you're looking for a specific delimiter. We'll cover using split(), a while loop with character-by-character reading.

note

The code examples assume that you have an example.txt file located in the same directory and that contains what follows:

tutorial
reference
.com
!
one
two
three

Reading Until a Character with split() (for smaller files)

If your file is relatively small and fits comfortably in memory, the simplest way to read up to a specific character is to read the entire file and then use the split() method:

with open('example.txt', 'r', encoding='utf-8') as file:
contents = file.read()
character = '!'
result = contents.split(character, 1)[0] # Split only once
print(result)

Output:

tutorial
reference
.com
  • The with open() opens the file in read mode ('r') with UTF-8 encoding, and automatically closes the file when the block is finished.
  • file.read() reads the entire file content into a single string. This is fine for small files, but inefficient for very large files.
  • The .split(character, 1) method is used to split the file content at the specified character.
  • maxsplit=1 limits the number of times the string is split.
  • [0] gets the part of the string before the first occurrence of the delimiter.

Reading Until a Character with a while Loop (for large files)

For large files that might not fit in memory, it's more efficient to read the file character by character until you encounter the target character:

with open('example.txt', 'r', encoding='utf-8') as file:
result = ''
stop_char = '!'

while True:
char = file.read(1) # Read one character at a time

if char == stop_char:
break # Stop when the character is found

if not char: # Reached end of file
print('Reached end of file')
break

result += char

print(result)

Output (assuming example.txt contains "tutorial\nreference\n.com\n!\none\ntwo\nthree"):

tutorial
reference
.com
  • file.read(1) reads one character at a time. This avoids loading the entire file into memory.
  • The while True loop continues indefinitely until explicitly broken.
  • if char == stop_char: checks if the current character is the target character. If so, break exits the loop.
  • if not char: checks if we've reached the end of the file (an empty string is returned by read() at EOF). If so, we print a message and break.
  • result += char: Appends the current character to the result string.

This approach is memory-efficient because it processes the file one character at a time.