|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
本帖最后由 Peteryo01223 于 2021-1-18 17:41 编辑
问题来源:
第29课:一个任务。
视频中,小甲鱼写了个范例。
我照猫画虎,抄了一遍。
两个小区别:
1. 我命名的 f 盘文件是 record.txt。我本想删除后缀的.txt,但没成功。因此,读取的时候,只好写为
- open('F://record.txt.txt')
复制代码
2. record.txt这个文件,我在论坛上没找到原始file,因此就自己写了一段类似,文字中间也用连续的等号隔开,结构与小甲鱼的例子一样,只不过中文内容换了。
但我的程序报错了,如下
- def save_file(boy, girl, count):
- file_name_boy = 'boy_' + str(count) + '.txt'
- file_name_girl = 'girl_' + str(count) + '.txt'
- boy_file = open(file_name_boy, 'w')
- girl_file = open(file_name_girl, 'w')
- boy_file.writelines(boy)
- girl_file.writelines(girl)
- boy_file.close()
- girl_file.close()
- def split_file(file_name):
-
- f = open('f://record.txt.txt')
- boy = []
- girl = []
- count = 1
- for each_line in f:
- if each_line[:6] != '======':
- (role, line_spoken) = each_line.split(':', 1)
- if role == '小甲鱼':
- boy.append(line_spoken)
- if role == '小客服':
- girl.append(line_spoken)
- else:
- save_file(boy, girl, count)
-
- boy = []
- girl = []
- count += 1
-
- save_file(boy, girl, count)
- f.close()
复制代码
报错内容,如下。请问为何?非常感谢:
会不会因为,我的文件名里面,写了两遍.txt,导致后续都出现命名问题?
我想在文件名中删除 .txt(右击鼠标,重命名,删除,这么个步骤),但一直不成功。
- ================== RESTART: C:\Users\user\Desktop\20210118a.py =================
- Traceback (most recent call last):
- File "C:\Users\user\Desktop\20210118a.py", line 41, in <module>
- split_file('record.txt')
- File "C:\Users\user\Desktop\20210118a.py", line 22, in split_file
- for each_line in f:
- UnicodeDecodeError: 'gbk' codec can't decode byte 0x81 in position 20: illegal multibyte sequence
- >>>
复制代码
本帖最后由 jackz007 于 2021-1-19 10:34 编辑
小甲鱼的代码是教学用的,考虑的都是理想条件,在容错性和代码精简方面不是很到位,这是我写的代码,楼主可以测试一下。
- def save(girl , boy , count):
- file_name_boy = 'boy_' + str(count) + '.txt' # 输出文件与源代码同目录
- file_name_girl = 'girl_' + str(count) + '.txt' # 输出文件与源代码同目录
- with open(file_name_boy , 'w') as boy_file:
- boy_file . writelines(boy)
- with open(file_name_girl , 'w') as girl_file:
- girl_file . writelines(girl)
- girl , boy , count = [] , [] , 1
- fp = open('record.txt' , encoding = 'UTF-8') # 为了减少干扰,'record.txt' 与源代码文件放到相同目录内。
- for each_line in fp:
- if each_line . strip(): # 过滤空文本行
- if each_line[:6] != '======': # 如果当前行是文本行
- if ':' in each_line: # 判断当前行是否可分割
- (role , line_spoken) = each_line . split(':', 1) # 只对可分割行进行分割
- if role == '小甲鱼':
- boy . append(line_spoken)
- if role == '小客服':
- girl . append(line_spoken)
- else:
- print(each_line) # 把无法分割的行显示出来
- else:
- save(girl , boy , count)
- count += 1
- fp . close() # 循环结束必须关闭文件
- save(girl , boy , count) # 把列表中的信息写入文件
复制代码
|
|