python具体在文本处理上怎么用

Python011

python具体在文本处理上怎么用,第1张

在诸多软件压缩包中或是项目压缩包中都会存在一个readme.txt文件,其中的内容无非是对软件的简单介绍和注意事项。但是在该文本文件中,内容没有分段分行,是非常冗杂地混在一起。当然处理手段多种多样,而我正好尝试利用Python解决这个问题。另外,这些内容或许对将来爬虫爬下的内容进行处理也是有些帮助的,只不过面对的混乱和处理需求不同而已。

这里的思路很简单,打开一个文本文档,对其中具有两个及两个以上的空格进行处理,即产生换行,另外出现很多的‘=’和‘>>>’也进行处理。这里我尝试处理的是easyGUI文件夹中的read.txt,该文件我复制在了D盘的根目录下。具体的实现代码如下:

def save_file(lister):#将传入的列表保存在新建文件中new_file = open('new_file','w')#创建并打开文件,文件可写new_file.writelines(lister)#将列表lister中的内容逐行打印new_file.close()#关闭文件,且缓存区中的内容保存至该文件中def split_file(filename):#分割原始文件f = open(filename)#打开该原始文件,默认该文件不可修改lister = []#初始化一个空列表for each_line in f:if each_line[:6] != '======' and each_line[:3] != '>>>':#当连续出现六个‘=’或连续三个‘>’时,打印一个换行符,实际体现在else中each_line.split(' ',1)#当出现两个空格时,分割一次,并在下一行代码中以一行的形式保存在列表中lister.append(each_line)else:

lister.append('\n')

save_file(lister)

f.close()

split_file('D:\\README.txt')

代码给出了详细的注释。其中得到的新的名为“new_file”的文件保存在默认的Python项目的目录下。当然,可以通过chdir()更改工作目录,使得文件创建在自己指定的位置。

在 pandas 中,存储文本主要有两种方式

但一般建议使用 StringDtype 类型存储文本数据。都是由于各种原因,现在字符串数据的默认存储类型还是 object 。

要存储为 string 类型,需要显式的设置 dtype 参数

或者在创建 Series 或 DataFrame 之后,使用 astype 转换类型

也可以使用 StringDtype/"string" 转换其他非字符串类型的数据

转换现有数据的类型

StringDtype 类型对象与 object 类型之间存在一些差异

两个结果的输出都是 Int64 类型。将其与 object 类型比较

当存在 NA 值时,输出为 float64 。类似地,对于返回布尔值的方法

Series 和 Index 有一套字符串处理方法,可以方便地对数组的每个元素进行操作,最重要的是,这些方法会自动忽略缺失值。

这些方法可以通过 str 属性访问,通常具有与内置字符串方法相匹配的名称

Index 上的字符串方法对于清理或转换 DataFrame 的列特别有用。

例如,您可能有带有前导或后置空格的列

因为 df.columns 是一个 Index 对象,所以我们可以使用 .str 访问器

我们可以根据需要对列名进行处理,然后重新设置列名。

例如,我们删除列名的前后空格,并将其改为小写字母,同时用 _ 替换剩余的空格

split 方法会返回一个值为 list 的 Series

可以使用 get 或 [] 访问拆分后的列表中的元素

更简单的方法是设置 expand 参数,返回一个 DataFrame

当原来的 Series 包含 StringDtype 类型的数据时,输出列也将全部为 StringDtype

当然,也可以设置切割次数

它还有个对应的 rsplit 方法,从右边起始对字符串进行拆分

replace 参数支持使用正则表达式,前两个参数是 pat (匹配模式) 和 repl (替换字符串)

如果只是想要替换字符串字面值,可以将 regex 参数设置为 False ,而不需要对每个特殊字符进行转义。此时 pat 和 repl 参数必须是字符串

此外, replace 方法还接受一个可调用的替换函数,会使用 re.sub() 方法在每个匹配的模式上调用该函数

该函数需要传入一个正则对象作为位置参数,并返回一个字符串。例如

replace 方法的 pat 参数还接受 re.compile() 编译的正则表达式对象。所有的 flags 需要在编译正则对象时设置

如果在 replace 中设置 flags 参数,则会抛出异常

有几种方法可以将一个 Series 或 Index 与自己或其他的 Series 或 Index 相连接,所有这些方法都是基于 cat() 方法

可以连接一个 Series 或 Index 的内容

如果未指定 sep 参数,则默认为空字符串

默认会跳过缺失值,也可以使用 na_rep 指定缺失值的表示方式

cat() 的第一个参数 others 可以是类似列表的对象,但是其长度需要和调用对象一致

只要两个对象中存在缺失值,对应的结果中也是缺失值,除非指定了 na_rep

others 参数也可以是二维的,但是得保证其行数必须与调用的对象一致

对于 Series 或 DataFrame 的连接,可以通过设置 join 参数指定对齐方式

通常 join 可选范围为: 'left' , 'outer' , 'inner' , 'right' 。此时,不再要求两个对象长度一致

当 others 参数是 DataFrame 时,也可以使用

可以将一些类似数组的对象(如 Series , Index 等)放在一个类似列表的容器中,然后传递给 cat

对于没有索引的对象,其长度必须与调用 cat 的对象相同。但是 Series 和 Index 可以是任意的,除非设置了 json=None 。

如果在 others 参数上包含不同索引的对象,且设置了 join='right' ,则最后的结果将会是这些索引的并集