python查询某文件中是否有指定的内容,如果存在什么也不做,如果不存在追加到文本中

本文详细介绍了如何使用Python进行文件的读写操作,并通过具体示例演示了如何判断文件中是否存在特定字符串,若不存在则进行追加。文章深入浅出地解析了'a+'模式下指针的位置对读取文件的影响。
部署运行你感兴趣的模型镜像

如题要完成以上要求,我们大概的流程就是:

打开文件–读取内容–判断是否存在–退出/追加

正题来了:

with open('test.txt', 'a+') as f:
	f.seek(0)
	lines = f.readlines()
	if "python大法好" in lines:
		pass
	else:
		f.write('\npython大法好')

with open() as f : 这个应该都明白,打开指定文件

f.seek(0) 指定指针位置,即将指针移动到第一行行首,这里之所以用到这一步,是因为 ‘a+’ ,意为追加读写模式,默认指针是在文件末尾的;

所以如果说不执行f.seek(0),lines = f.readlines()将读取不到文件内容。

接下来就是 if 语句判断了,判断指定内容 “python大法好” 是否存在于我们查找的文件中,如果存在,那么什么也不做,否则,追加进去

道理很简单,方法也很简单,唯一需要注意的就是指针问题,如果不注意可能会忽略,但是后面对着一个没有报错的无结果程序,还是非常难受滴

您可能感兴趣的与本文相关的镜像

Python3.10

Python3.10

Conda
Python

Python 是一种高级、解释型、通用的编程语言,以其简洁易读的语法而闻名,适用于广泛的应用,包括Web开发、数据分析、人工智能和自动化脚本

<think> 根据用户需求,我们需要读写文本文件提取以"AB"开头的行写入新文件。以下是实现步骤: 1. 打开源文件读取)和目标文件(写入) 2. 逐行读取文件 3. 判断每一行是否以"AB"开头 4. 将符合条件的行写入目标文件 5. 关闭文件(建议使用with语句自动管理) 参考引用[2]:使用open函数打开文件指定模式(读用'r',写用'w')和编码(如utf-8)[^2]。 引用[4]提到使用codecs模块可以更方便地指定编码,但这里我们使用内置的open函数即可。 注意:如果目标文件存在,'w'模式会覆盖原有内容;如果想追加,则使用'a'模式[^3]。 实现代码: ```python def extract_lines_starting_with_AB(input_file, output_file): """ 读取输入文件,将以'AB'开头的行写入输出文件 参数: input_file (str): 输入文件路径 output_file (str): 输出文件路径 """ try: with open(input_file, 'r', encoding='utf-8') as infile, \ open(output_file, 'w', encoding='utf-8') as outfile: # 逐行读取输入文件 for line in infile: # 检查行是否以'AB'开头(注意:行可能有空格,使用lstrip去除左侧空白) if line.lstrip().startswith('AB'): outfile.write(line) print(f"成功提取写入到: {output_file}") except FileNotFoundError: print(f"错误:文件 {input_file} 存在") except Exception as e: print(f"发生错误: {str(e)}") # 使用示例 if __name__ == "__main__": input_path = "input.txt" # 替换为你的输入文件路径 output_path = "output.txt" # 替换为你的输出文件路径 extract_lines_starting_with_AB(input_path, output_path) ``` ### 代码说明: 1. **逐行读取**:使用`for line in infile`逐行读取,避免内存消耗过大[^2] 2. **行首判断**:使用`line.lstrip().startswith('AB')` - `lstrip()`:移除行首空白字符(空格、制表符等),确保以AB开头的行即使有缩进也能被识别 - 严格匹配:只匹配以AB开头的行(区分大小写,若需区分大小写可改为:`line.lstrip().lower().startswith('ab')`) 3. **文件操作**: - 使用`with`语句自动关闭文件[^2] - 指定UTF-8编码以支持中文等字符[^4] 4. **错误处理**: - 捕获文件存在异常 - 捕获其他可能的异常(如权限问题) ### 示例: 假设`input.txt`内容: ``` 这是第一行 AB123: 重要数据 AB456: 缩进的数据(这行也会被捕获,因为lstrip移除了空格) CD789: 其他数据 AB final line ``` 输出`output.txt`: ``` AB123: 重要数据 AB456: 缩进的数据(这行也会被捕获,因为lstrip移除了空格) AB final line ``` ### 扩展功能: 如果需要更复杂的匹配(如正则表达式),可修改判断条件: ```python import re pattern = re.compile(r'^AB\d+') # 匹配以AB开头后跟数字的行 if pattern.match(line.lstrip()): outfile.write(line) ``` §§相关问题§§ 1. 如何同时匹配多个前缀(如AB或CD开头的行)? 2. 如何忽略大小写匹配以"ab"开头的行? 3. 如何将匹配的行同时输出到控制台和文件? 4. 如何保留原文件的行号信息? 5. 处理超大文件(GB级别)时如何优化内存使用 </think># Python读写文本:将以"AB"开头的行写入文件 下面是Python实现读取文本文件将以"AB"开头的行写入新文件的完整方法: ## 实现代码 ```python def extract_AB_lines(input_file, output_file): """ 读取输入文件,提取以'AB'开头的行写入输出文件 参数: input_file: 输入文件路径 output_file: 输出文件路径 """ try: # 使用with语句打开文件,确保自动关闭 with open(input_file, 'r', encoding='utf-8') as infile, \ open(output_file, 'w', encoding='utf-8') as outfile: # 逐行读取输入文件 for line in infile: # 检查行是否以'AB'开头(考虑空格情况) if line.lstrip().startswith('AB'): # 写入输出文件 outfile.write(line) print(f"成功提取{input_file}中以'AB'开头的行保存到{output_file}") except FileNotFoundError: print(f"错误:文件 {input_file} 存在") except Exception as e: print(f"处理文件时出错: {str(e)}") # 使用示例 if __name__ == "__main__": input_path = "source.txt" # 替换为你的输入文件路径 output_path = "AB_lines.txt" # 替换为输出文件路径 extract_AB_lines(input_path, output_path) ``` ## 关键功能说明 1. **逐行读取文件**: - 使用`for line in infile:`高效逐行处理大文件 - 避免一次性加载整个文件到内存[^1] 2. **行首检测逻辑**: - `line.lstrip().startswith('AB')`检测行首 - `lstrip()`移除行首空白字符,确保准确检测 - 支持带缩进的行:` AB123`也能匹配 3. **文件操作安全**: - 使用`with`语句自动管理文件资源[^2] - 指定UTF-8编码处理多语言文本[^4] - 包含错误处理(文件存在等) 4. **写入模式**: - 使用`'w'`模式创建/覆盖输出文件 - 如需追加,可改为`'a'`模式[^3] ## 使用示例 假设`source.txt`内容: ``` 这是普通行 AB123: 重要数据1 AB456: 带缩进的数据 CD789: 其他数据 AB final line ``` 运行后`AB_lines.txt`内容: ``` AB123: 重要数据1 AB456: 带缩进的数据 AB final line ``` ## 扩展功能 ### 1. 忽略大小写匹配 ```python if line.lstrip().lower().startswith('ab'): outfile.write(line) ``` ### 2. 同时输出匹配行到控制台 ```python if line.lstrip().startswith('AB'): outfile.write(line) print(f"找到匹配行: {line.strip()}") # 同时输出到控制台 ``` ### 3. 保留行号信息 ```python for line_num, line in enumerate(infile, 1): if line.lstrip().startswith('AB'): outfile.write(f"Line {line_num}: {line}") ``` ### 4. 使用正则表达式匹配更复杂模式 ```python import re pattern = re.compile(r'^AB\d+') # 匹配以AB开头后跟数字的行 if pattern.match(line.lstrip()): outfile.write(line) ``` ## 注意事项 1. **文件编码**:使用`encoding='utf-8'`确保正确处理中文等字符[^4] 2. **路径处理**:使用原始字符串或双反斜杠处理Windows路径 ```python input_path = r"C:\data\source.txt" # 推荐 # 或 input_path = "C:\\data\\source.txt" ``` 3. **大文件处理**:逐行读取方法适合GB级大文件处理 此方法结合了文件操作的最佳实践[^2][^3][^4],可安全高效地处理文本文件读取和特定内容的提取写入。
评论 5
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值