项目小结(一)
我是一名普通的大四学生,第一次在研究生导师的带领下接触项目,而且一上来就是一块硬骨头。现在通过这种方式来记录一下。
前言
六月底,我在国外第一学年的学习结束,但是由于疫情,原本的回国计划泡汤,只能在这里继续苟着。本想着先休息放松几天再联系导师,可没想到他就像掌握了我的课表一样,准时联系我让我跟着国内的同学一起做项目。
摸鱼是摸不了了,那就跟着一起干吧。可是没想到,第一次接触项目,就是一个大项目,而且十分棘手。
项目经历
由于这个项目是涉密项目,因此不能透露细节,那就只说一下日常,和我遇到的一些知识。
我是项目进行到一半的时候进组的,一开始的基本算法设计环节我都没有参与到,可能我也帮不上忙吧(来自菜鸡的无奈)……
进组之初,项目负责人(以下称S)给我分配的任务是根据接收到的文本(给定的结构)来解析出需要的信息。这里用到的主要的是文件的读取操作(读取接收到的文本)加上正则表达式(从字符串里提取指定的信息)的应用。
Life is short, you need Python. 下面就先来看看Python中的文件操作吧。
文件操作
首先我们要先打开一个文件,使用Python中的open()方法。
open(file, mode='r', buffering=-1, encoding=None, errors=None, newline=None, closefd=True, opener=None)
参数有很多,其中file是必需参数,是需要打开的文件的文件名,最常用的是mode参数,是打开文件的方式。下面是常用的mode对应的含义。
| 标识 | r | w | r+ | w+ | a | a+ |
|---|---|---|---|---|---|---|
| 含义 | 只读 | 只写 | 读+写 | 写+读 | 追加 | 追加+读 |
加上b则是以二进制的格式打开文件,例如rb表示二进制读,wb表示二进制写。
对于这些常用的打开方式的差别,我们可以得到以下表格。
| 标识 | 读 | 写 | 文件不存在时 | 打开文件时指针的位置 |
|---|---|---|---|---|
| r | + | 报错 | 开头 | |
| r+ | + | + | 报错 | 开头 |
| w | + | 创建 | 开头 | |
| w+ | + | + | 创建 | 开头 |
| a | + | 创建 | 结尾 | |
| a+ | + | + | 创建 | 结尾 |
在操作文件时尤其要注意打开文件的方式和当前指针的位置,否则会导致预期之外的错误,比如原始文件被擦除,或者写入完成后末尾有之前文件的残留等。
读取文件对象的函数有f.read() f.readline() f.readlines() 等,f.read()是读取所有,f.readline()是读取到下一个换行符,f.readlines()则返回所有行内容的列表。
此外我们还有f.truncate()用来截断当前位置之后的内容,f.tell()返回当前指针的位置,f.seek()来调整指针的位置。
对于写入内容,我们使用f.write(),这里要注意指针位置,避免擦除重要数据;还有f.writelines(),传入参数通常是字符串列表,用来实现批量写入,但是需要换行的话则要手动在字符串结尾加上换行符。
不常用的有f.flush()用来立即把缓存区中的内容写入文件,f.fileno()来返回文件的描述符(以后会用到,挖个坑)。
切记最后要关闭文件,执行f.close()操作。为了避免遗忘,可以使用
with open('filename', 'r') as f:
f.read()
这样在完成操作后,Python会自动关闭文件,简单省事儿。
这些就是主要用到的文件操作,当然这只是一个非常简略的回顾,作为以后提醒自己的材料,想要深入了解这个技术的读者可能还需要自行探索更多,去阅读更加详细的材料。
未完待续……

浙公网安备 33010602011771号