Python学习之文件处理

打开关闭

  • open()close()
  • with语句
 with open("./2/"+str(i)+".txt", 'r',encoding="utf-8") as f:
        lines = f.readlines()
  • 参数
描述
‘r’ 读取模式(默认值)
‘w’ 写入模式,当文件不存在时创建它,当文件存在时清除原有内容
‘x’ 独占写入模式,当文件不存在时创建它,当文件存在时引发异常
‘a’ 附加模式,在既有文件末尾继续写入
‘b’ 二进制模式(与其它模式结合使用)
‘t’ 文本模式(默认值,与其它模式结合使用)
‘+’ 读写模式(与其它模式结合使用)

读取写入

  • 按字符或字节读写 f.write(),f.read()
  • 按行读写 readline(),writelines()
    注意,写入时并不会自动添加换行符。

去除文件中的空白行

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()
for i in range(1,158) : 
    delblankline("./1/"+str(i)+".txt", "./2/"+str(i)+".txt")

保留文件中的特定行数

for i in range(1,158) :   
    with open("./2/"+str(i)+".txt", 'r',encoding="utf-8") as f:
        lines = f.readlines()#按行读取
        lines = lines[:-4]#舍掉后四行
    with open("./2/"+str(i)+".txt", 'w',encoding="utf-8") as f:
        f.write(''.join(lines))#重新写入

os.path — 常用路径操作

os.path.isfile(path)

网上有说需要传绝对路径,但我使用相对路径也可以判断。官方文档似乎也没有提到。

如果path是现有的常规文件,则返回True。本方法会跟踪符号链接,因此,对于同一路径,islink()和isfile()都可能为True。
在 3.6 版更改:接受一个类路径对象。

path-like object -- 路径类对象
代表一个文件系统路径的对象。类路径对象可以是一个表示路径的str或者bytes对象,还可以是一个实现了os.PathLike 协议的对象。
一个支持os.PathLike协议的对象可通过调用os.fspath()函数转换为str或者bytes类型的文件系统路径;
os.fsdecode() 和 os.fsencode()可被分别用来确保获得strbytes类型的结果。
此对象是由PEP 519引入的。

os.path.abspath(path)

返回路径path的绝对路径(标准化的)。
在大多数平台上,这等同于用normpath(join(os.getcwd(), path))的方式调用 normpath()函数。
在3.6版更改:接受一个类路径对象。

os.path.dirname(path)

返回路径path的目录名称。
这是将path传入函数split()之后,返回的一对值中的第一个元素。
在3.6版更改:接受一个类路径对象。

os.path.join(path, *paths)

合理地拼接一个或多个路径部分。
返回值是path和*paths所有值的连接,每个非空部分后面都紧跟一个目录分隔符 (os.sep),除了最后一部分。
这意味着如果最后一部分为空,则结果将以分隔符结尾。
如果参数中某个部分是绝对路径,则绝对路径前的路径都将被丢弃,并从绝对路径部分开始连接。
在Windows上,遇到绝对路径部分(例如 r'\foo')时,不会重置盘符。如果某部分路径包含盘符,则会丢弃所有先前的部分,并重置盘符。请注意,由于每个驱动器都有一个“当前目录”,所以os.path.join("c:", "foo") 表示驱动器 C: 上当前目录的相对路径(c:foo),而不是c:\foo。
在3.6版更改: 接受一个类路径对象 用于path和paths 。

os.path.exists(path)

如果path指向一个已存在的路径或已打开的文件描述符,返回True。
对于失效的符号链接,返回False。
在某些平台上,如果使用os.stat()查询到目标文件没有执行权限,即使path确实存在,本函数也可能返回False。
在3.3版更改:path现在可以是一个整数:如果该整数是一个已打开的文件描述符,返回True,否则返回False。
在3.6版更改: 接受一个类路径对象。

os.makedirs

递归目录创建函数。与mkdir()类似,但会自动创建到达最后一级目录所需要的中间目录。
mode参数会传递给mkdir(),用来创建最后一级目录,对于该参数的解释,请参阅mkdir()中的描述。要设置某些新建的父目录的权限,可以在调用makedirs()之前设置umask。现有父目录的权限不会更改。
如果exist_ok为False(默认值),则如果目标目录已存在将引发FileExistsError。

注解:如果要创建的路径元素包含pardir(如UNIX系统中的 "..") makedirs()将无法明确目标。
本函数能正确处理UNC路径。

引发一个审计事件os.mkdir,附带参数path、mode、dir_fd。

3.2新版功能:exist_ok参数。
在3.4.1版更改: 在 Python 3.4.1 以前,如果exist_ok 为True,且目录已存在,且mode与现有目录的权限不匹配,makedirs()仍会抛出错误。由于无法安全地实现此行为,因此在Python 3.4.1中将该行为删除。请参阅bpo-21082。
在3.6版更改: 接受一个类路径对象。
在3.7版更改: mode 参数不再影响新创建的中间目录的权限。

删除重复行

readDir = "./javaword.txt" 
writeDir = "./jw.txt" 
#生成一个集合
lines_seen = set() 
#打开写入文件
outfile=open(writeDir,"w") 
#打开读取文件
f = open(readDir,"r") 
#判断是否重复
for line in f: 
  if line not in lines_seen: 
    outfile.write(line) #将不存在的写入
    lines_seen.add(line) 
#关闭写入文件
outfile.close() 
print ("success")

你可能感兴趣的:(python)