测试代码 jb51.txt
1:www.jb51.net
2:www.jb51.net
3:www.jb51.net
4:www.jb51.net
5:www.jb51.net
6:www.jb51.net
7:www.jb51.net
8:www.jb51.net
9:www.jb51.net
10:www.jb51.net
11:www.jb51.net
12:www.jb51.net
13:www.jb51.net
14:www.jb51.net
15:www.jb51.net
16:www.jb51.net
python代码
代码一
# -*- coding: utf-8 -*-
在Python编程中,有时我们需要处理文本文件,去除其中的空白行以优化数据或者进行特定的文本处理任务。本文将详细讲解三种不同的Python实现方法来去除文本文件中的空白行,并解析这些代码的工作原理。
**方法一:基于`split()`函数**
```python
# -*- coding: utf-8 -*-
def delblankline(infile, outfile):
infopen = open(infile, 'r', encoding="utf-8")
outfopen = open(outfile, 'w', encoding="utf-8")
lines = infopen.readlines()
for line in lines:
if line.split():
outfopen.writelines(line)
else:
outfopen.writelines("")
infopen.close()
outfopen.close()
delblankline("jb51.txt", "o.txt")
```
在这个实现中,我们首先打开输入文件(`infile`)和输出文件(`outfile`)。然后,通过`readlines()`方法读取输入文件的所有行,存储到`lines`列表中。对于`lines`中的每一行,我们使用`split()`函数检查是否包含任何非空白字符。如果`split()`返回的列表长度不为0,说明这行不是空白行,将其写入输出文件。否则,写入一个空字符串,代表删除了空白行。最后关闭两个文件。
`split()`函数默认使用空格作为分隔符,它会将字符串切分为子字符串列表。如果字符串中没有空格,`split()`将返回一个只包含原字符串的列表,其长度为1。如果字符串仅包含空格,`split()`会返回一个空列表,表示没有有效内容。
**方法二:基于`strip()`函数**
```python
# -*- coding: utf-8 -*-
def delblankline(infile, outfile):
infopen = open(infile, 'r', encoding="utf-8")
outfopen = open(outfile, 'w', encoding="utf-8")
lines = infopen.readlines()
for line in lines:
line = line.strip()
if len(line) != 0:
outfopen.writelines(line)
outfopen.write('\n')
infopen.close()
outfopen.close()
delblankline("jb51.txt", "o2.txt")
```
这个方法使用`strip()`函数,它会移除字符串开头和结尾的空白字符。如果字符串只剩下空白,`strip()`将返回一个空字符串。因此,我们可以通过检查`line.strip()`的长度来判断是否是空白行。不是空白行的话,写入输出文件并添加一个换行符。
**方法三:基于`readlines()`和`write()`**
```python
#coding:utf-8
import sys
def delete(filepath):
f=open(filepath,'a+')
fnew=open(filepath+'_new.txt','wb') #将结果存入新的文本中
for line in f.readlines(): #对每一行先删除空格,\n等无用的字符,再检查此行是否长度为0
data=line.strip()
if len(data)!=0:
fnew.write(data)
fnew.write('\n')
f.close()
fnew.close()
if __name__=='__main__':
if len(sys.argv)==1:
print(u"必须输入文件路径,最好不要使用中文路径")
else:
delete(sys.argv[1])
```
这个方法与方法二类似,但使用了`write()`函数而不是`writelines()`。`write()`函数可以直接写入字符串,不需要传入一个列表。这里,我们依然使用`strip()`去除行首尾的空白,并检查长度,然后写入文件。
以上三种方法都可以有效地去除文本文件中的空白行,选择哪一种取决于具体需求和代码风格。在实际开发中,考虑到效率和代码可读性,通常会优先选择简洁且易于理解的实现方式。同时,处理大量数据时,应考虑文件操作的性能,避免一次性加载整个文件到内存。在处理大文件时,可以考虑使用逐行读取的方式,减少内存消耗。