作者回复: 这里有两个问题导致报错,第一个报错的原因是在pycharm执行时有可能使用了python2解释器,因为pycharm可以支持多个解释器的。可以在界面下方运行结果上面查看正在使用的解释器。
第二个问题是你在打开文件open()时使用了b参数,在后面对文件写入的时候就必须为f传入一个byte字节类型,而'你好'是string字符串类型,必须使用encode()函数转换成byte类型,write()函数才能接收。
作者回复: 系统的字符集和文件的字符集不匹配,输出出来就是乱码了,尝试搜索引擎搜索一下怎样改变输出的编码,看看能不能搞定你的问题
作者回复: 内置模块如果需要了解用法可以使用help(open)或者官方文档来查看,因为大部分内置模块并非使用python编写的,而是C语言编写,这里的pass当中它的一个声明,而不是实现即可。
至于使用C语言目的自然是为了提高效率,以Python3.7为例,如果希望了解它的实现可以下载Python源代码\Python-3.7.0\Modules\_io\_iomodule.c
文件包括了io的C语言实现
如果希望了解Python版本的实现可以参考Python-3.7.0\Python-3.7.0\Lib\_pyio.py
37行
def open(file, mode="r", buffering=-1, encoding=None, errors=None,
newline=None, closefd=True, opener=None):
但是还要注意的是里面的主要实现FileIO()依然用C语言实现的。
所以在这里不建议大家从最基础内建函数入手,因为会涉及底层C语言和更多的操作系统知识,不利于大家入门,容易打击积极性。
建议先掌握应用逻辑再回头重新掌握操作系统、网络基础、这样学习起来虽然总体时间增加,但是目的性明确。
作者回复: 检查一下open() 打开文件的方式, 如果非binary方式,是不支持seek(2,1)这种用法的
作者回复: 您好,通用的方法是
File -> Settings... -> Appearance & Behavior -> System Settings
去掉以下2个选项的选中
Synchronize files on frame activation
Save files on frame deactivation
最新版我这边还没有试过,如果无法取消只能等官方更新补丁了
作者回复: help(file2.read) 可以发现read()会尽可能多的读取文件内容,文件指针会移动到结尾,第二个read不会返回文件开头所以没有读取到任何信息
作者回复: file3是一个叫做 _io.TextIOWrapper 的对象,输出内容要用read方法即 print(file3.read())
作者回复: mode参数有"w"和“a”等多个参数,w表示写入,并先截断文件 a表示写入,如果文件存在则在末尾追加。
参考
https://docs.python.org/zh-cn/3.6/library/functions.html?highlight=open#open
作者回复: mode 称作关键字, 如果函数的参数不使用关键字,是按照open()声明的顺序,按顺序将参数传递给关键字的。
指定关键字一般为传递的参数不按顺序, 如:
函数声明的是func(key1 ,key2 ,key3)
传递参数的时候是func(key1=value1,key3=value3)
作者回复: 你的结论是对的,但是实验结果误导了你。
r+ 和 a+ 都会在文件结尾追加内容,区别是追加之后,文件指针的位置,r+会移动到文件开头,a+会移动到文件结尾,所以你看到readlines读取的内容是不同的
作者回复: 换行符已经生效了,你的写入操作类似执行了回车换行之后没有进行更多的内容,所以在文本中没有显示,
试试file3.write('马超'+'\n'+'abc')
作者回复: 建议至少补充三点
1 linux的基本操作和操作系统原理,毕竟大部分服务端程序是运行在linux系统环境上的
2 常见的协议 如tcp http ,现在大部分的服务都是cs或bs结构,有必要了解协议的实现
3 根据工作的内容学习相关的知识,如从事web后端开发尝试了解web服务器相关知识,如从事前端开发尝试了解html css js等知识,从事图形开发则去了解gtk,从事深度学习了解tensorflow等等,根据不同工种积累该项工作的技术栈
作者回复: 可以在相对目录文件操作前增加abspath()来查看文件的绝对路径,如果文件内容没有在程序运行过程中修改那么这里的name.txt应该是同名不同目录的两个文件
import os
print( os.path.abspath('name.txt') )