文本文件追加内容时如何添加至新行而非末尾?
解决文本文件追加内容到新行且避免空白行的问题
这个问题我之前折腾过好多次!核心就是要平衡两个需求:既要让新内容乖乖待在新行,又不能因为重复跑脚本就多出一堆空白行对吧?
问题根源
你之前的尝试(直接加换行符)之所以会出空白行,是因为如果文件最后一行本身已经有换行符,你再追加一个换行,就等于多了一行空的。反过来,如果文件最后没有换行,直接追加内容就会粘在最后一个单词后面,就像你遇到的South Carolinacalifornia这种情况。
具体解决办法
我们需要先判断文件末尾有没有换行符,再决定要不要加换行,然后再追加内容。下面给两个常用场景的实现:
1. Python 脚本实现
用a+模式打开文件(支持读写),先检查文件最后一个字符是不是换行:
with open('your_file.txt', 'a+') as f: # 把文件指针移到末尾 f.seek(0, 2) # 只有文件不为空的时候才检查最后字符 if f.tell() > 0: # 指针回退一位,读取最后一个字符 f.seek(f.tell() - 1) last_char = f.read(1) # 如果最后不是换行,先加一个换行 if last_char != '\n': f.write('\n') # 追加内容,末尾加换行保证下次运行时文件末尾有换行 f.write('california\n')
2. Bash 脚本实现
用tail -c1获取文件最后一个字符,判断是否为换行:
# 替换成你的文件名和要追加的内容 FILE="your_file.txt" CONTENT="california" # 检查文件存在且不为空,同时最后一个字符不是换行 if [ -s "$FILE" ] && [ "$(tail -c1 "$FILE")" != $'\n' ]; then echo "" >> "$FILE" fi # 追加内容(echo 默认会在末尾加换行) echo "$CONTENT" >> "$FILE"
额外提示
不管用哪种方式,记得在追加的内容末尾加上换行符(比如Python里的\n,Bash里echo默认自带),这样下次运行脚本时,文件末尾本身就有换行,不会重复添加,从根源避免空白行的产生。
内容的提问来源于stack exchange,提问作者yibs
相关产品推荐
相关产品推荐

