在利用诸如pd.read_csv,open等函数对文件数据进行导入和读取时,我们常常需要指定文件的编码格式,常见的编码格式包括UTF-8、UTF-16、ISO-8859-1等等,那么如何对文件的编码格式进行确定,这里需要用到python中的chardet库:
import chardet
# file_path = "D:/kaggle/data.txt"
file_path = "D://kaggle//data.xls"
# 读取文件内容,并使用 chardet 检测编码
with open(file_path, 'rb') as f:
raw_data = f.read() # 将读取的文件内容存储到变量中
result = chardet.detect(raw_data) # 变量分析
# 打印检测结果
print(f"The detected encoding is: {result['encoding']}. "
f"Confidence: {result['confidence']:.2f}")
# 编码格式及置信度
The detected encoding is: ISO-8859-1. Confidence: 0.73
The detected encoding is: None. Confidence: 0.00
文件编码检测结果为ISO-8859-1,置信度为0.73,置信度不是非常高;
文件编码检测结果为None,且置信度为0.00,说明无法对文件的编码格式进行确定,可以利用其他方法进一步确定文件编码格式或者对各种编码格式进行逐一试错;
再者,可以考虑使用一些无需自行指定文件编码格式的方法进行文件读取,例如,针对Excel文件格式xls、xlsx,可以利用专门的python库对其进行读取和处理,无需进行文件编码格式的确定和试错:
import xlrd
# xlrd支持xls文件
# import pandas as pd
# 文件路径
file_path = r"D:/kaggle/data.xls"
# df = pd.read_excel(file_path)
# print(df.head()) # pandas也可以
# 打开 Excel 文件
workbook = xlrd.open_workbook(file_path)
print(workbook)
# 选择第一个工作表
sheet = workbook.sheet_by_index(0)
print(sheet)
# 读取数据示例:输出第一行前5列的数据
for col in range(min(sheet.ncols, 5)):
cell_value = sheet.cell_value(0, col)
print(f"第1行第{col+1}列:", cell_value)
# 关闭 workbook
workbook.release_resources()
del workbook
import xlrd
# import the data
file_path = "D://kaggle//data.xls"
workbook = xlrd.open_workbook(file_path) # 打开Excel文件
sheet = workbook.sheet_by_index(0) # 索引第一个工作表
column = sheet.col_values(1) # 不可以像列表一样进行切片
print(column)
# print(sheet[0][1], type(sheet[0]), type(sheet[0][1])) # <class 'list'> <class 'xlrd.sheet.Cell'>
value = sheet[1][1] # cell
print(value.value, type(float(value.value))) # cell.value str float(str)
# 建立df存储表格信息