Python读写文件

读文件

方法1

with open(filein) as f:
    data = [line.strip().split(' ') for line in f]

方法2

with open(filein) as f:
    fcsv = f.readlines()  # fcsv是一个数组,里面的元素是每一行字符串
    data = [line.strip().split(' ') for line in fcsv]

方法3

import csv
with open(filein) as f:
    freader = csv.reader(f)  # 文件需要是csv文件,也就是逗号分隔符
    headers = next(freader)  # 读走标题,相当于不写入标题
    gini = [i for i in freader]
#    del gini[0]  # 删除标题

方法4

import pandas as pd
from sklearn.ensemble import AdaBoostClassifier

data = pd.read_csv(filein1, header=None)  # header=None是为了不加上列名, data是DataFrame类型
m, n = data.shape
X_train = data.ix[:, :n-2]  # X_train是DataFrame类型
Y_train = data.ix[:, n-1]  # Y_train是Series类型

data = pd.read_csv(filein2, header=None)
m, n = data.shape
X_test = data.ix[:, :n-2]
Y_test = data.ix[:, n-1]

clf = AdaBoostClassifier(n_estimators=200, learning_rate=0.8)
clf.fit(X_train, Y_train)
Y_pred = clf.predict(X_test)  # Y_pred是ndarray类型

"""遍历Series类型的Y_test和ndarray类型的Y_pred,让他们都变成list类型"""
Y_pred = [int(i) for i in Y_pred]
Y_test = [int(i) for i in Y_test]

"""计算平均准确率"""
# Counter(Y_test)得到result={Counter}Counter({1:337, 2:70}),这是二分类问题,只有两个标签
oneclassLen = Counter(Y_test)[1]  # 得到oneclassLen=337
twoclassLen = Counter(Y_test)[2]  # 得到twoclassLen=70
oneclassnum = 0
twoclassnum = 0
for i in range(len(Y_test)):
    if Y_pred[i] == Y_test[i]:
        if Y_pred[i] == 1:
            oneclassnum = oneclassnum + 1
        elif Y_pred[i] == 2:
            twoclassnum = twoclassnum + 1
oneAccuracy = oneclassnum/oneclassLen
twoAccuracy = twoclassnum/twoclassLen
print("一类的召回率为", oneprecision)
print("二类的召回率为", twoprecision)
print("平均准确率为", (oneprecision + twoprecision)/2)

写文件

方法1

data = ['Hello World', 'Hi, World']
fileout = r'C:\Users\Administrator\Desktop\test.txt'
with open(fileout, 'w') as f:
    for row in data:
        f.write(row+'\n')

方法2

import csv
data = [[1,2],[3,4]]
with open(fileout, 'w', newline='') as f:  # newline=''是为了防止在每一行下面生成一行空白行
#    fwriter = csv.writer(f, lineterminator='\n')  # lineterminator='\n'是为了防止在每一行下面生成一行空白行
    fwriter = csv.writer(f)
    for row in data:
        fwriter.writerow(row)

方法3

import pandas as pd
data = [[1,2],[3,4]]
# header=False, index=False是为了不将头名和索引写进文件中
pd.DataFrame(data).to_csv(fileout, header=False, index=False)  
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值