1

我对 Python 中的字符串感到困惑,

考虑这段代码,

fo = open("test.txt", "wb")
fo.write(bytes('Sufiyan','UTF-8'))

如果我要运行这段代码,它会给出这个错误,

Traceback (most recent call last):

  File "C:\Users\Sufiyan\Desktop\AES\a.py", line 2, in <module>

    fo.write('Sufiyan')

TypeError: 'str' does not support the buffer interface

因此,我必须将其转换为bytes并提供编码类型。

fo = open("test.txt", "wb")
fo.write(bytes('Sufiyan','UTF-8'))

这是可行的,因为如果您使用 Python3x,那么 string 与 Python 2.x 的类型不同,您必须将其转换为字节(对其进行编码)。

现在,当我使用此代码写入文件时,

def BB_cf(file, *args, **kwargs): #Create files
    
    try:
        
        fo = open(file)
        fo.close()
        
    except IOError:

        print (file, 'not Found')
        print ("Creating file.....")
        fo = open(file, "w")
        print (file,"Created Successfully!")
        
        if file == 'input_Data.txt':
            print(file,"is Empty..\nWriting Data..")
            text = kwargs.get('text', None)
            fo.write(text)
            print("'"+text+"'", "is written in",file)
            fo.close()
            
        fo.close()

.

BB_cf('input_Data.txt', text='Sufiyan Ghori')

正如您在最后第 4 行中看到的那样fo.write(text),我没有对其进行编码,但代码仍在工作。

为什么代码在没有编码的情况下工作?

现在,如果我将其转换为bytes,它将给出以下错误,

回溯(最近一次通话最后):

文件“C:\Users\Sufiyan\Desktop\AES\BlackBox.py”,第 47 行,在

BB_cf('input_Data.txt', text='Sufiyan Ghori')   File 

“C:\Users\Sufiyan\Desktop\AES\BlackBox.py”,第 41 行,在 BB_cf

fo.write(bytes(text,'UTF-8')) TypeError: must be str, not bytes

上述两个代码都使用 Python3x 运行,第一个代码希望我将其编码stringBytes,而第二个代码在没有编码的情况下运行。

4

1 回答 1

2

第一次,您通过执行fo = open("test.txt", "wb"). 第二次,你做到了fo = open(file, "w")。该字符串"wb"向 Python 表明您只想使用字节而不是字符串来写入文件,而"w"第二个示例中的字符串则相反。

具体来说,open函数的文档说明:

如概述中所述,Python 区分二进制和文本 I/O。以二进制模式打开的文件(包括模式参数中的“b”)将内容作为字节对象返回,无需任何解码。在文本模式下(默认值,或者当 't' 包含在模式参数中时),文件的内容以 str 形式返回,这些字节首先使用平台相关的编码或使用指定的编码(如果给定)进行解码。

(重点由我添加)

于 2013-10-18T14:43:05.980 回答