鱼C论坛

 找回密码
 立即注册
查看: 1865|回复: 9

[已解决]Mac python 往文件输入内容是 报内容不是字符串

[复制链接]
发表于 2020-8-27 08:54:32 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
os.write(fd,"奥特曼爱打小怪兽")
Traceback (most recent call last):
  File "<pyshell#5>", line 1, in <module>
    os.write(fd,"奥特曼爱打小怪兽")
TypeError: a bytes-like object is required, not 'str'
最佳答案
2020-8-27 22:05:51
xiaoshengemu 发表于 2020-8-27 21:46
>>> os.write(fd,"奥特曼爱打小怪兽".encode())
Traceback (most recent call last):
  File "", line  ...

你的前后代码呢?问题应该不在这一行
下面这个是可以运行的
import os,sys
fd = os.open( "haha", os.O_CREAT|os.O_WRONLY)
os.write(fd,"奥特曼爱打小怪兽".encode(encoding='GBK'))#GBK方式编码
#os.write(fd,"奥特曼爱打小怪兽".encode())#utf-8编码
os.close(fd)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-8-27 08:56:31 | 显示全部楼层
发完整代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-8-27 08:57:32 | 显示全部楼层
os.write(str(fd) + "奥特曼爱打小怪兽")
看看行不行吧
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-8-27 09:17:20 | 显示全部楼层
本帖最后由 sunrise085 于 2020-8-27 09:18 编辑

英文理解错了。报错是说:类型错误,需要类似字节类型对象,而不是字符串类型对象
也就是说这里的参数不能是字符串,应该字节流

解决方法,对字符串进行编码
给你提供一种方法,你也可以自己再查查,将字符串编码的方式方法
os.write(fd,"奥特曼爱打小怪兽".encode())
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-8-27 09:39:07 | 显示全部楼层


看看这个是不是你遇到的问题:https://www.fujieace.com/python/str-bytes.html

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-8-27 21:46:21 | 显示全部楼层
sunrise085 发表于 2020-8-27 09:17
英文理解错了。报错是说:类型错误,需要类似字节类型对象,而不是字符串类型对象
也就是说这里的参数不能 ...

>>> os.write(fd,"奥特曼爱打小怪兽".encode())
Traceback (most recent call last):
  File "<pyshell#10>", line 1, in <module>
    os.write(fd,"奥特曼爱打小怪兽".encode())
TypeError: an integer is required (got type tuple)
  报错
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-8-27 21:50:19 | 显示全部楼层
Twilight6 发表于 2020-8-27 09:39
看看这个是不是你遇到的问题:https://www.fujieace.com/python/str-bytes.html

str="奥特曼爱打小怪兽"
>>> str=str.encode()
>>> os.write(fd,str)
Traceback (most recent call last):
  File "<pyshell#14>", line 1, in <module>
    os.write(fd,str)
TypeError: an integer is required (got type tuple)

报错
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-8-27 22:05:51 | 显示全部楼层    本楼为最佳答案   
xiaoshengemu 发表于 2020-8-27 21:46
>>> os.write(fd,"奥特曼爱打小怪兽".encode())
Traceback (most recent call last):
  File "", line  ...

你的前后代码呢?问题应该不在这一行
下面这个是可以运行的
import os,sys
fd = os.open( "haha", os.O_CREAT|os.O_WRONLY)
os.write(fd,"奥特曼爱打小怪兽".encode(encoding='GBK'))#GBK方式编码
#os.write(fd,"奥特曼爱打小怪兽".encode())#utf-8编码
os.close(fd)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-9-4 19:32:45 | 显示全部楼层
sunrise085 发表于 2020-8-27 22:05
你的前后代码呢?问题应该不在这一行
下面这个是可以运行的

执行完上面的代码后

os.write(fd,"奥特曼爱打小怪兽".encode(encoding='GBK'))#GBK方式编码
16
os.close(fd)
然后文件就打不开了
用python来读取
fd = os.open( "/Users/xiaoshengemu/Desktop/haha.rtf", os.O_RDONLY)
red = os.read(fd,2314)
print (red)
b'\xb0\xc2\xcc\xd8\xc2\xfc\xb0\xae\xb4\xf2\xd0\xa1\xb9\xd6\xca\xde'
读是读出来了。但是返回了乱吗
之后有用终端读取 结果返回
??????????С????%   
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-9-7 21:07:21 | 显示全部楼层
本帖最后由 xiaoshengemu 于 2020-9-7 21:18 编辑
xiaoshengemu 发表于 2020-9-4 19:32
执行完上面的代码后

os.write(fd,"奥特曼爱打小怪兽".encode(encoding='GBK'))#GBK方式编码


想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-1-18 20:05

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表