python3 写文件问题

Posted IT-物语

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python3 写文件问题相关的知识,希望对你有一定的参考价值。

0x92 即 10010010,UTF8 中编码一个字符的第一个字节(start byte)只可能是 0xxxxxxx110xxxxx1110xxx11110xxx……而后面的字节只可能是 10xxxxxx。也就是说 0x92 只能作为后面的字节,却出现在了第一个字节的位置。

出现这种问题绝大部分情况是因为文件不是 UTF8 编码的(例如,可能是 GBK 编码的),而系统默认采用 UTF8 解码。解决方法是改为对应的解码方式。

极少数情况是因为文件损坏了或者和一部分非 UTF8 编码混在一起,可以修复文件或采用 replace 等方式解码。

Python 2 没有问题是因为 Python 2 默认以字节流(对应 Python 3 的 bytes)的方式读文件,不像 Python 3 默认解码为 unicode,把读文件的方式改为 rb 有同样的效果,不过 Python 3 中处理 bytes 还可能遇到很多问题就是了……

 

此种方式报错 UnicodeDecodeError: ‘utf-8‘ codec can‘t decode byte 0xea in position 3171: invalid c

with open(childrenFile + "\\" + childrenFile_00,"r", "utf-8") as f:
则尝试下面这种方式,解释如上
with open(childrenFile + "\\" + childrenFile_00,"rb") as f:

python3 读取文件 写入库
/*******************************************************************************************************/

#coding:utf-8

from imp import reload

import pymysql
import time
import json
import datetime
import requests
import urllib
import datetime
import getopt
import random
import xlwt
import os
import sys
import codecs
reload(sys)


if os.path.exists(‘logs‘)==False:
os.mkdir(‘logs‘)

config={‘host‘:‘127.0.0.1‘,
‘user‘:‘root‘,
‘password‘:‘root‘,
‘port‘:3306 ,
‘database‘:‘test‘,
‘charset‘:‘utf8‘
}
conn= pymysql.connect(**config)
cur=conn.cursor()

path = ‘F:\BreachCompilation\data‘
files = os.listdir(path)

for file in files :
childrenFile = path + "\\" + file
files_00 = os.listdir(childrenFile)

for childrenFile_00 in files_00 :

with open(childrenFile + "\\" + childrenFile_00,"rb") as f:
ftextlist = f.readlines()
start = 0
for line in ftextlist:
##content_0 = ftextlist.split("\n")
element = line.decode("utf-8").split(":")
start = start + 1
print("-------索引------" + str(start))
if( len(element) >= 2 ):
print("邮箱" + element[0] + "密码:" + element[1])
insertSQL = "insert into 40G (uname, pwd) value(‘%s‘, ‘%s‘)" % (pymysql.escape_string(element[0]), pymysql.escape_string(element[1]))
cur.execute(insertSQL)
conn.commit()

##element = content.split(":")
##print(element[0] + "----" + element[1])
##insertSQL = "insert into 40G (uname, pwd) value(‘%s‘, ‘%s‘)" % (element[0], element[1])

print("over")
##cur.close()
##conn.close()


/**********************python3 当 \x 需要转义 转义为 \/x**************************************************************************/

#coding:utf-8

from imp import reload

import pymysql
import time
import json
import datetime
import requests
import urllib
import datetime
import getopt
import random
import xlwt
import os
import sys
import codecs
reload(sys)


if os.path.exists(‘logs‘)==False:
os.mkdir(‘logs‘)

config={‘host‘:‘127.0.0.1‘,
‘user‘:‘root‘,
‘password‘:‘root‘,
‘port‘:3306 ,
‘database‘:‘test‘,
‘charset‘:‘utf8‘
}
conn= pymysql.connect(**config)
cur=conn.cursor()

path = ‘E:\/xunleixiazai\BreachCompilation\data‘
files = os.listdir(path)

for file in files :
childrenFile = path + "\\" + file
files_00 = os.listdir(childrenFile)

for childrenFile_00 in files_00 :

with open(childrenFile + "\\" + childrenFile_00,"rb") as f:
ftextlist = f.readlines()
start = 0
for line in ftextlist:
##content_0 = ftextlist.split("\n")
element = line.decode("utf-8").split(":")
start = start + 1
print("-------索引------" + str(start))
if( len(element) >= 2 ):
print("邮箱" + element[0] + "密码:" + element[1])
insertSQL = "replace into 40G (uname, pwd) value(‘%s‘, ‘%s‘)" % (pymysql.escape_string(element[0]), pymysql.escape_string(element[1]))
cur.execute(insertSQL)
conn.commit()

##element = content.split(":")
##print(element[0] + "----" + element[1])
##insertSQL = "insert into 40G (uname, pwd) value(‘%s‘, ‘%s‘)" % (element[0], element[1])

print("over")
##cur.close()
##conn.close()


























































































































































以上是关于python3 写文件问题的主要内容,如果未能解决你的问题,请参考以下文章

学习笔记:python3,代码片段(2017)

python常用代码片段总结

Python类OOPs概念[重复]

Android 逆向Linux 文件权限 ( Linux 权限简介 | 系统权限 | 用户权限 | 匿名用户权限 | 读 | 写 | 执行 | 更改组 | 更改用户 | 粘滞 )(代码片段

C++ 代码片段执行

创建自己的代码片段(CodeSnippet)