Python处理文本文件行时输出异常问题求助
Hey there! Let's break down what's causing those weird parentheses and quotes in your output, then fix it with cleaner, more reliable code.
Why You're Seeing ('Color=blue\n')
That strange formatting happens because you’re passing a tuple (not a regular string) to the print() function. When Python prints a tuple, it uses the tuple’s "official representation" (from the repr() method) instead of just the text inside—hence the parentheses and single quotes.
This usually happens by accident: maybe you had a stray comma when reading lines (like line = f.readline(),, which turns the string into a single-element tuple) or incorrectly wrapped the line in parentheses somewhere in your code. Your current test code looks okay, but it sounds like an earlier version had this tuple mishap.
Another small issue with your original code: print() automatically adds a newline character at the end of each output. Since lines read from the file already end with \n, this creates extra blank lines in your new config file.
Better Solution: Use file.write() Instead of print()
The cleanest fix is to use the file object’s write() method instead of print(). This gives you full control over exactly what gets written to the file—no extra newlines or unexpected tuple formatting. We’ll also use Python’s with statement to handle file closing automatically (safer than manually calling close()).
Here’s the revised code:
import sys # Add newline characters to match the original file's line endings Line2 = 'Start Date=01/01/2018\n' Line3 = 'End Date=04/01/2018\n' # Use 'with' to auto-close files (prevents resource leaks) with open('C:/Apps/newconfig.txt', 'w') as result_file: try: with open('C:/Apps/config.txt', 'r') as f: for line in f: # Use startswith() for clearer, more readable checks if line.startswith('Start'): result_file.write(Line2) elif line.startswith('End D'): result_file.write(Line3) else: result_file.write(line) except Exception as e: # Include error details for easier debugging result_file.write(f'Error: {str(e)}\n')
Key Improvements:
write()instead ofprint(): Writes exactly the string you pass, no extra newlines or tuple formatting.withstatements: Automatically closes files even if an error occurs, so you don’t have to remember to callclose().startswith(): More readable than slicingline[0:5]—it clearly shows you’re checking the start of the line.- Detailed error messages: Replaces generic "fail" with the actual error text, making debugging easier.
If you ever accidentally end up with a tuple again, you can convert it back to a string with str(line) or access the first element with line[0] (for single-element tuples), but using write() from the start avoids this problem entirely.
内容的提问来源于stack exchange,提问作者Lou57

