文件

什么是文件?

如何用python打开word文档 python文档怎么打开_python


文件的打开方式:

如何用python打开word文档 python文档怎么打开_txt文件_02


打开文件:

f = open('F:\\record.txt')  # 默认打开方式为只读
print(f)
## 结果为<_io.TextIOWrapper name='F:\\record.txt' mode='r' encoding='cp936'>

文件对象方法:

如何用python打开word文档 python文档怎么打开_字符串_03


文件对象方法关于读文件的示例:

f = open('F:\\record.txt')
print(f)
print(f.read())  # 结果为zhai
print(f.tell())  # 返回当前文件指针位置,一共有4个英文字符,所以指向4。中文字符每个占2字节。
# print(f.read(3))  # 结果为zha
print(f.seek(2, 0))  # 在文件中移动指针,使得指针偏移2个字节
print(f.readline())  # 结果为ai

文件对象方法关于写文件的示例:

f = open('F:/test.txt', 'w')  # 将文件打开模式设置为可写w
print(f)
f.write('I love zhangyixing!')
f.close()  # 关闭之后立即将上述东西写入文件,不然只是放在其缓冲区内

【例】将record.txt文件中的对话内容按照======分割成3段对话,在每段对话中提取不同角色的说话内容并保存到相应的新文件中去。

如何用python打开word文档 python文档怎么打开_txt文件_04


将其划分为对应的文件,如下所示:

如何用python打开word文档 python文档怎么打开_对象方法_05


每个文件里保存相应角色在不同对话中的谈话内容。(如consultant1.txt保存了客服在第一段对话中的谈话内容)。consultant1.txt文件内容如下所示:

如何用python打开word文档 python文档怎么打开_python_06


具体代码如下所示:

f = open('F:\\record.txt', encoding='UTF-8')
consumer = []  # 保存顾客语句
consultant = []  # 保存客服语句
count = 1

for each_line in f:
    if each_line[:6] != '======':  #分割字符串:无需判断那么长,只需要判断前6个是否为=
        # 按照======字符串进行分割
        (role, line_spoken) = each_line.split(':', 1)  # 按照:区分人物及语句
        if role == '顾客':
            consumer.append(line_spoken)  # 当冒号前面的字符为“顾客”时,将冒号后面的字符添加到consumer = []中
        if role == '客服':
            consultant.append(line_spoken)  # 当冒号前面的字符为“客服”时,将冒号后面的字符添加到consultant = []中
    else:
        # 文件的分别保存操作
        file_name_consumer = 'consumer' + str(count) + '.txt'
        file_name_consultant = 'consultant' + str(count) + '.txt'

        consumer_file = open(file_name_consumer, 'w')
        consultant_file = open(file_name_consultant, 'w')

        consumer_file.writelines(consumer)  # 多个语句按序列写用writelines
        consultant_file.writelines(consultant)

        consumer_file.close()  # 关闭文件才能保存之前写入的内容
        consultant_file.close()

        consumer = []  # 为了下一次循环初始化
        consultant = []
        count += 1

# 因为上述分割过程是按“======”分割的,而原本的文档中是用两行“======”分成三个对话,最后一段对话需要单独处理
file_name_consumer = 'consumer' + str(count) + '.txt'
file_name_consultant = 'consultant' + str(count) + '.txt'

consumer_file = open(file_name_consumer, 'w')
consultant_file = open(file_name_consultant, 'w')

consumer_file.writelines(consumer)
consultant_file.writelines(consultant)

consumer_file.close()
consultant_file.close()

f.close()  # 关闭record文件

注意:文件操作执行完记得close,避免忘记关闭文件导致资源的占用。
上述代码重复部分太多,代码可读性差,我们需要对它进行优化。很容易的就可以想到,我们可以定义几个函数来对一些重复操作进行封装,优化后的代码如下所示:

# 分别保存文档操作
def save_file(consumer, consultant, count):
    file_name_consumer = 'consumer' + str(count) + '.txt'
    file_name_consultant = 'consultant' + str(count) + '.txt'

    consumer_file = open(file_name_consumer, 'w')
    consultant_file = open(file_name_consultant, 'w')

    consumer_file.writelines(consumer)  # 多个语句按序列写用writelines
    consultant_file.writelines(consultant)

    consumer_file.close()  # 关闭文件才能保存之前写入的内容
    consultant_file.close()

# 分割文档操作
def split_file(file_name):
    f = open(file_name, encoding='UTF-8')
    consumer = []  # 保存顾客语句
    consultant = []  # 保存客服语句
    count = 1

    for each_line in f:
        if each_line[:6] != '======':
            # 按照======字符串进行分割
            (role, line_spoken) = each_line.split(':', 1)
            if role == '顾客':
                consumer.append(line_spoken)
            if role == '客服':
                consultant.append(line_spoken)
        else:
            # 文件的分别保存操作
            save_file(consumer, consultant, count)
            consumer = []  # 为了下一次循环初始化
            consultant = []
            count += 1

    save_file(consumer, consultant, count)      # 单独处理最后一段对话

    f.close()  # 关闭file_name文件

# 对record.txt进行分割
split_file('F:\\record.txt')

以上代码同样能够实现任务要求,在与该python文件的同目录下建立好了任务所需的文档。

如何用python打开word文档 python文档怎么打开_对象方法_07