python writelines或者write写入文件,打开空白问题

本文介绍了一个在PyCharm环境下使用f.write()和f.writelines()进行文件写入时遇到的问题及解决方法。作者最初尝试使用绝对路径写入文件,但发现文件为空。通过更改路径为相对路径后,问题得到解决。

在pycharm项目中用 f.write()和f.writelines()写入时正常,不报错,但是发现内容没有进去?
解决方法,就是将绝对路径改为相对路径

原本:"C:/Users/90647/PycharmProjects/MyNetFunction/data/vocab.txt"
修改:out_dir = '../data/vocab.txt'

怪不得打开一直是空白!!!!唉

<think>根据用户需求,我们需要编一个Python脚本,实现读取文件并删除其中空白行的功能。空白行指的是包含任何字符或只包含空白字符(如空格、制表符等)的行。 实现思路: 1. 打开文件进行读取。 2. 逐行读取文件内容,并检查每一行是否为空行(去除空白字符后是否为空字符串)。 3. 将非空白行保存到一个临时列表或字符串中。 4. 将处理后的内容回到原文件(或另一个文件)。 注意:为了安全起见,可以先处理并将结果写入一个临时文件,然后替换原文件或者将全部非空行读入内存,再回原文件。 具体步骤: - 使用`open`函数打开文件,注意使用`'r'`模式读取。 - 使用`readlines()`读取所有行,或者逐行处理。 - 对每一行,使用`strip()`方法去除两端的空白字符,然后判断长度是否为0。 - 收集所有非空白行。 - 重新以写入模式打开同一个文件(这样会覆盖原文件),将非空白写入。 另一种做法:使用临时文件,处理完后再替换原文件(更安全,避免处理过程中出错导致原文件损坏)。 这里我们采用直接读入内存再回的方式,因为文件是特别大时,这种方式简单有效。 代码示例: ```python def remove_blank_lines(filename): # 读取文件中的所有行 with open(filename, 'r', encoding='utf-8') as file: lines = file.readlines() # 过滤掉空白行 # 注意:我们去除行内的空白,只判断整行是否为空白 non_blank_lines = [line for line in lines if line.strip() != ''] # 将非空白文件 with open(filename, 'w', encoding='utf-8') as file: file.writelines(non_blank_lines) # 使用示例 if __name__ == '__main__': filename = input("请输入文件名: ") # 或者直接指定文件名 remove_blank_lines(filename) print("空白行已删除") ``` 说明: 1. 使用`with open`可以确保文件正确关闭。 2. 读取时指定了编码`utf-8`,你可以根据实际文件编码调整。 3. 列表推导式用于过滤空白行:`line.strip()`会去掉行首尾的空白字符(包括换行符),如果结果为空字符串,则判定为空白行。 4. 注意:原文件的换行符会被保留,因为我们读取时保留了每行末尾的换行符(`readlines`返回的每行字符串包含换行符),在判断时用`strip`去掉,但写入写入的是原行,所以换行符还在。这样非空白行之间的换行会被保留,而空白行被删除。 改进:如果文件很大,我们可以逐行处理并写入临时文件,最后替换原文件,以节省内存。但通常文件会太大,所以上述方法足够。 另外,如果希望保留原文件,可以修改为将结果写入文件。 相关问题: 1. 如何处理非常大的文件以避免内存足? 2. 如何同时删除行首和行尾的空白字符(包括空格和制表符)? 3. 如何在删除空白行的同时统计删除了多少行? 4. 如何扩展此脚本以支持命令行参数输入文件名? </think>以下是一个Python脚本实现读取文件并删除空白行的完整解决方案: ### Python脚本:删除文件空白行 ```python def remove_blank_lines(input_file, output_file=None): """ 删除文件中的空白行 参数: input_file -- 输入文件路径 output_file -- 输出文件路径(默认为覆盖原文件) """ # 确定输出文件路径(默认覆盖原文件) if output_file is None: output_file = input_file # 读取文件并过滤空白行 with open(input_file, 'r', encoding='utf-8') as f_in: # 使用列表推导式过滤空白行 non_blank_lines = [line for line in f_in if line.strip() != ''] # 写入处理后的内容 with open(output_file, 'w', encoding='utf-8') as f_out: f_out.writelines(non_blank_lines) print(f"已成功删除空白行。处理结果保存至: {output_file}") # 使用示例 if __name__ == "__main__": input_file = "example.txt" # 替换为你的文件名 remove_blank_lines(input_file) ``` ### 功能说明: 1. **空白行判断**:使用`line.strip() != ''`检测空行(包括只含空格/制表符的行)[^3] 2. **文件处理**: - 默认模式:直接覆盖原文件 - 可选模式:指定输出文件保留原文件 3. **编码处理**:使用`utf-8`编码,可自动处理中文等特殊字符 ### 使用示例: ```python # 保留原文件,结果输出到新文件 remove_blank_lines("原始文件.txt", "处理后的文件.txt") # 直接修改原文件(默认行为) remove_blank_lines("需要清理的文件.txt") ``` ### 替代实现(逐行处理版): ```python # 适用于大文件的低内存版本 def remove_blank_lines_lowmem(input_file, output_file=None): if output_file is None: output_file = input_file # 使用临时文件处理 temp_file = output_file + ".tmp" with open(input_file, 'r') as f_in, open(temp_file, 'w') as f_out: for line in f_in: if line.strip(): # 非空行判断 f_out.write(line) # 替换原文件 import os os.replace(temp_file, output_file) ``` ### 注意事项: 1. **备份建议**:处理重要文件前建议先备份 2. **编码问题**:遇到编码错误时可尝试`encoding='latin-1'`或`errors='ignore'` 3. **行结束符**:脚本会自动保留原始文件的换行符格式(`\n`或`\r\n`) > 此实现参考了Python文件处理的最佳实践[^2][^3],并结合了高效的列表推导式进行空白行过滤。对于需要保留行首/行尾空格的情况,可修改条件为`if line != '\n' and line != '\r\n'`。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值