• Cody Yang
    2018-06-11
    请问为什么我在pycharm (python3.6)上写同样的代码就会报错“ f.write('你好')
    UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-1: ordinal not in range(128)”
    如果将代码改成
    f = open('name1.txt','wb')
    f.write('你好'.encode('utf8'))
    f.close()
    就没问题了
    展开

    作者回复: 这里有两个问题导致报错,第一个报错的原因是在pycharm执行时有可能使用了python2解释器,因为pycharm可以支持多个解释器的。可以在界面下方运行结果上面查看正在使用的解释器。
    第二个问题是你在打开文件open()时使用了b参数,在后面对文件写入的时候就必须为f传入一个byte字节类型,而'你好'是string字符串类型,必须使用encode()函数转换成byte类型,write()函数才能接收。

    
     3
  • qingsong
    2018-12-29
    对file 文件操作的时候,需要指定编码格式:
    file1 = open('name.txt','w', encoding='utf-8')
    否则就会报错:UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-2: ordinal not in range(128)
    
     2
  • hiuchuen
    2019-01-06
    老师您好,我根据您的步骤进行书写,最后在name的文件里面输出的是�����,���这样的

    作者回复: 系统的字符集和文件的字符集不匹配,输出出来就是乱码了,尝试搜索引擎搜索一下怎样改变输出的编码,看看能不能搞定你的问题

    
     1
  • 飞行员
    2018-08-06
    老师,请教一下,open内置函数,因为打开文件,需要返回对象,查看源码,发现没有返回值,只有一个占位符pass,这个怎么理解啊?

    作者回复: 内置模块如果需要了解用法可以使用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语言和更多的操作系统知识,不利于大家入门,容易打击积极性。
    建议先掌握应用逻辑再回头重新掌握操作系统、网络基础、这样学习起来虽然总体时间增加,但是目的性明确。

    
     1
  • 小泥吧℡₁₈₉ ₈₃...
    2018-06-11
    UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-2: ordinal not in range(128)


    3.6环境报错
    
     1
  • xiao
    2019-12-14
    为什么我执行seek(2,1),从当前位置往后移动两位,总是报错呢?

    作者回复: 检查一下open() 打开文件的方式, 如果非binary方式,是不支持seek(2,1)这种用法的

    
    
  • 卓沛潇
    2019-10-27
    老师我用了JetBrains PyCharm Community Edition 2019.2.3 x64 这个版本,我每次写完程序它都自动保存,我想关闭自动保存功能,网上说的调试方法都不管用,希望得到指导谢谢

    作者回复: 您好,通用的方法是
    File -> Settings... -> Appearance & Behavior -> System Settings
    去掉以下2个选项的选中
    Synchronize files on frame activation
    Save files on frame deactivation
    最新版我这边还没有试过,如果无法取消只能等官方更新补丁了

    
    
  •  
    2019-09-20
    file=open('name.txt','w')
    file.write('关羽')
    print(file.write('关羽'))
    为什么输出结果会是2?

    作者回复: help(file.write)可以看到返回的是写入的字符数量
    write(text, /) method of _io.TextIOWrapper instance
        Write string to stream.
        Returns the number of characters written (which is always equal to
        the length of the string).

     1
    
  •  
    2019-09-20
    为什么print(file.write(’诸葛亮’))输出结果会是2?
    
    
  • 张望
    2019-08-14
    这样可以正常打印——
    file2=open("name.txt")
    print(file2.read())
    file2.close()

    这样就无法打印——
    file2=open("name.txt")
    file2.read()
    print(file2.read())
    file2.close()

    为什么呢???

    展开

    作者回复: help(file2.read) 可以发现read()会尽可能多的读取文件内容,文件指针会移动到结尾,第二个read不会返回文件开头所以没有读取到任何信息

    
    
  • molly
    2019-08-02
    老师,请问按你的代码打的,为什么name.txt里面永远为空啊
    
    
  • 😋
    2019-08-01
    # 将小说的主要任务记录在文件中
    file1= open('name.txt','w')
    file1.write('dsda')
    file1.close()
    #写入文件
    # open(mode=w)

    #读取文件

    file2 = open('name.txt','a')
    file2.write('liubei')
    print(file2)
    file2.close()

    file3 =open('name.txt')
    file3.read()
    print(file3)
    file3.close()
     运行以后显示不出来我所输入的内容是为什么呢?
    /Users/liushiyao/PycharmProjects/AppiumDemo8/venv/bin/python /Users/liushiyao/Desktop/pytest/src/file_op.py
    <_io.TextIOWrapper name='name.txt' mode='a' encoding='UTF-8'>
    <_io.TextIOWrapper name='name.txt' mode='r' encoding='UTF-8'>

    Process finished with exit code 0
    展开

    作者回复: file3是一个叫做 _io.TextIOWrapper 的对象,输出内容要用read方法即 print(file3.read())

    
    
  • 刘大头
    2019-07-07
    file3 = open('name.txt','a') 'w'为甚么可以用'a'代替,不能用其他b c d代替

    作者回复: mode参数有"w"和“a”等多个参数,w表示写入,并先截断文件 a表示写入,如果文件存在则在末尾追加。
    参考
    https://docs.python.org/zh-cn/3.6/library/functions.html?highlight=open#open

    
    
  • 海绵宝宝
    2019-07-02
    file = open('name.txt', 'a') 和 file = open('name.txt', mode = 'a')有什么区别?mode = 'a'是什么意思

    作者回复: mode 称作关键字, 如果函数的参数不使用关键字,是按照open()声明的顺序,按顺序将参数传递给关键字的。
    指定关键字一般为传递的参数不按顺序, 如:
    函数声明的是func(key1 ,key2 ,key3)
    传递参数的时候是func(key1=value1,key3=value3)

    
    
  • 蒙萌梦
    2019-06-08
    老师您好,在自己练习文件打开时,遇到了以下问题,还请老师帮忙解答。读取文件的话,是从当前指针位置往后读,对的吧, 用'r+'模式打开文件,指针是怎么变化的,'r+' 和'a+' 的区别主要在哪里。我自己用以下代码实验 (macos系统)
    with open('idol.txt','r+') as file_ob:
        file_ob.write('456')
        print(file_ob.readlines())

    idol.txt初始内容是123,我第一次运行上面程序,第一次输出结果为['123'],我去查看idol文件,里面已经是123456了。我第二次运行以上程序,第二次输出结果为['123456'], idol文件里是123456456. 如果打开模式换成'a+', 运行程序,输出结果始终都是[], 但是文件里每次都会在末尾添加一次456。我理解的是,'a+' 添加后指针到最后位置了,所以读的始终是空list。
    展开

    作者回复: 你的结论是对的,但是实验结果误导了你。
    r+ 和 a+ 都会在文件结尾追加内容,区别是追加之后,文件指针的位置,r+会移动到文件开头,a+会移动到文件结尾,所以你看到readlines读取的内容是不同的

    
    
  • 踏雪断蓝桥
    2019-03-06
    老师,根据网上的换行操作,无法实现换行

    file3 = open('name.txt','a')
    file3.write('马超'+'\n')
    file3.close()

    作者回复: 换行符已经生效了,你的写入操作类似执行了回车换行之后没有进行更多的内容,所以在文本中没有显示,
    试试file3.write('马超'+'\n'+'abc')

    
    
  • qingsong
    2018-12-28
    python3.6解释器 一直报 ‘UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-2: ordinal not in range(128) ’该错误
    
    
  • Gyan
    2018-10-08
    老师好,请问读取文件有没有参数设置指定文件路径读指定文件的?
    
    
  • 叶えなくちゃ
    2018-09-25
    请问下老师,在学习完本课程后,操作系统,计算机网络的相关其他基础知识的学习应该怎样进行呢,是从头把C语言捡起来吗?还没有入行,争取尽快入行,希望老师可以给一些学习的建议,总是感觉搜集了很多资料但是 不知道应该看哪个,也不知道恰当的学习顺序。

    作者回复: 建议至少补充三点
    1 linux的基本操作和操作系统原理,毕竟大部分服务端程序是运行在linux系统环境上的
    2 常见的协议 如tcp http ,现在大部分的服务都是cs或bs结构,有必要了解协议的实现
    3 根据工作的内容学习相关的知识,如从事web后端开发尝试了解web服务器相关知识,如从事前端开发尝试了解html css js等知识,从事图形开发则去了解gtk,从事深度学习了解tensorflow等等,根据不同工种积累该项工作的技术栈

    
    
  • 李荣科·酱油㍿
    2018-08-01
    老师您好,在学习您的课程的时候遇到一个问题,在绝对路径下打开的文件内容和相对路径下打开的内容不一致(绝对路径下打开的内容是正确的),想问问是什么原因以及如何解决。


    代码如下(win10,python3.6,开发工具是vs code):

    # 按行读取整个文件
    file4 = open(r'name.txt')
    print(file4.readlines())
    file4.close
    #输出结果是['刘备刘备刘备刘备刘备刘备刘备刘备刘备']


    file5 = open(r'C:\Users\leepx\OneDrive\Myself\GitHub\python_learn\geek_time\name.txt')
    print(file5.readlines())
    file5.close
    #输出结果是['1. 对对对\n', '2. 刘备\n', '3. 刘备\n', '4. 张飞\n', '5. 关羽刘备刘备刘备']
    展开

    作者回复: 可以在相对目录文件操作前增加abspath()来查看文件的绝对路径,如果文件内容没有在程序运行过程中修改那么这里的name.txt应该是同名不同目录的两个文件
    import os
    print( os.path.abspath('name.txt') )

    
    
我们在线,来聊聊吧