python2写入文件关于中文乱码和格式情况【手记二】

版本声明:Python2.7

原代码:

    date = raw_input("请输入销售日期:" )
    ID = raw_input("请输入销售员编号:" )
    name = raw_input("请输入商品名称:" )
    number = raw_input("请输入商品数量:" )
    price = raw_input("请输入商品单价:" )
    sum = int(number)*int(price)
    s =(date+ID+name+number+price+sum)

经过不断修改,前后出现报错:

1、TypeError: cannot concatenate 'str' and 'int' objects

2、TypeError: can only concatenate tuple (not "str") to tuple (python)

3、不报错,但是写出的中文是乱码

针对第一第二个问题,我查了查,反复尝试了“+”和“,”去调整,也尝试了str(变量名)、int(变量名)。

前者还是会出现报错,后者则会出现,像“001”这样的数据,要么变成“1”,要么变成“ab001”的情况。

针对第三个问题,像是在输入中文的地方前面加u等等,试了几种,还是不太行。

最后到的一个解决办法如下:

修改后的代码:

    date = raw_input("请输入日期:" )
    ID = raw_input("请输入编号:" )
    x = raw_input("请输入名称:" )
    g = x.decode('utf-8')
    name = g.encode('gbk')

    number = raw_input("请输入数量:" )
    price = raw_input("请输入单价:" )
    sum = int(number)*int(price)
    s ="%0s%13s%13s%13s%13s%13s" % (date, ID,name,number,price,sum)

运行成功,能够顺利写入文件,且中文输出有效。

后来想要读取文件中符合条件的行,根据关键词按行搜索和提取,在打印提取结果时,再次遇到了中文乱码问题。

最后的解决方式是:

f = open("D:\\test.txt","r")
lines = f.readlines()
print("日期 名称 数量 价格 共计")
for lines in lines:
    if "001" in lines:
        print(lines.decode("gbk"))

 

Reference:
版权声明:本文为优快云博主「joyfixing」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.youkuaiyun.com/joyfixing/article/details/79971667

### Python 文件入乱码解决方案 当遇到Python文件入过程中出现乱码的情况时,通常是因为编码设置不匹配所引起的。以下是几种有效的解决办法: #### 方法一:指定正确的编码格式 在打开文件时显式指明编码格式可以有效防止乱码现象的发生。对于包含中文字符的内容,建议使用`utf-8`作为默认编码。 ```python with open('example.txt', 'w', encoding='utf-8') as file: file.write('你好世界') ``` 这种方法适用于大多数情况下处理纯文本文件的操作[^2]。 #### 方法:加入BOM标记(Byte Order Mark) 针对CSV文件特别适用,在创建文件前先入UTF-8 BOM头信息能够帮助某些应用程序识别正确的编码形式。 ```python import codecs with open('data.csv', 'wb') as csvfile: csvfile.write(codecs.BOM_UTF8) with open('data.csv', 'a', newline='', encoding='utf-8-sig') as csvfile: writer = csv.writer(csvfile) writer.writerow(['姓名', '年龄']) ``` 此方法能很好地兼容Excel等办公软件对非ASCII字符的支持[^4]。 #### 方法三:转换字符串编码 如果源数据本身存在错误的编码,则可以在入之前对其进行重新解码再编码操作。 ```python text = some_response.read().decode('gbk').encode('utf-8') with open('output.html', 'wb') as html_file: html_file.write(text) ``` 这种方式主要用于网络请求返回的数据可能存在不同编码的情况下[^3]。 通过上述任意一种或组合多种策略可极大程度上减少甚至消除因编码差异而导致的乱码问题。值得注意的是,选择合适的编码方式取决于具体的应用环境以及目标平台的要求。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值