笔记,字符串(2)
实战:读取csv中信息(中文和数字),对照姓名筛选相关行信息,并进行相关判断输出至新csv。有些臃肿复杂,可以更简单点,后续改进(“光看不练假把式”,纯手打摸索,受益匪浅,对列表、字典以及编码方式的理解还是太浅,依旧保留Fortran那种机器的思维编程)
import numpy as np import csv import math import string ''' 整数字符串转换为对应的整数 int('12') 小数字符串转换为对应小数 float('12.34') 数字转换为字符串 str(123.45) ASCII码转换为相应字符 chr(97) 字符转换为响应ASCII码 ord('a') ''' list_file = [] #注意是新建列表,必须符合列表的操作原则!其中各元素的属性是字符串 write = [] write1 = [] write2 = [] reader = csv.reader(open(r'F:\party\try.csv', 'r')) for row in reader: list_file.append(row) #添加列表信息 list_file.remove(list_file[0]) #去除首行 #print(list_file[0][4]) f = open(r"F:\party\name.txt", "r") lines = f.readlines() f.close() j = 0 # 计数 f = 0 # 查看是否出错 for ii in lines: i = ii.strip('\n') #去掉末尾换行符 i1 = ''.join(i.split(' ')) #去掉文字中间空格 # print(ii, i, i1) for row in list_file: if row[0] == i1: #判断名字是否一致 # print(row[0], row[12:15]) write.append(row[12:15]) write1.append(row[0]) j = j+1 row[12] = row[12].replace(',', '') #去除逗号 print(row[12]) if float(row[12]) <= 3000: if float(row[13]) != 0.005: print('danger', row[0]) f += 1 elif 5000. >= float(row[12]) > 3000.: if float(row[13]) != 0.01: print('danger', row[0]) f += 1 elif float(row[12]) > 5000.: if float(row[13]) != 0.015: print('danger', row[0]) f += 1 break print(j, f) i = 0 with open(r'F:\party\first_party.csv', 'w', newline='') as data: writer = csv.writer(data) while (i < j): write2 = write[i] # 列表中的元素进行拆分,形成新的列表,为后面进行对应的插入 write2.insert(0, write1[i]) print(write2) writer.writerow(write2) write2 = [] #清除 i += 1
#####下面都是些失败品,层试图用字典读取:失败;尝试numpy读取:失败,关键是对中文字符的读取、确认产生问题,一直没攻克,详细参考:http://www.2cto.com/kf/201203/124951.html ''' import sys print(sys.getdefaultencoding()) import importlib importlib.reload(sys)
#sys.setdefaultencoding('utf8') #Python3不再使用,详细:http://stackoverflow.com/questions/961162/reloading-module-giving-nameerror-name-reload-is-not-defined
'''
#打开文件,用with打开可以不用去特意关闭file了,python3不支持file()打开文件,只能用open()
with open("F:\party\oc_party.csv", "r", encoding="utf-8") as csvfile:
#读取csv文件,返回的是迭代类型
read = csv.reader(csvfile)
print(read)
# for i in read:
# print(i)
data = np.loadtxt("F:\party\oc_party.csv", dtype=np.str, skiprows=1)
print(data)
f = open(r"F:\party\name.txt", "r")
lines_nm = f.readlines()
f.close()
f = open(r"F:\party\oc_party.txt", "r")
lines = f.readlines()
f.close()
'''
'''
with open(r'F:\party\oc_party1.csv', encoding='gbk') as csvfile:
reader = csv.DictReader(csvfile)
for row in reader:
print(row['职工姓名'], row['交纳党费'])
with open(r'F:\party\oc_party1.csv', 'rb',) as csvfile:
# 读取csv文件,返回的是迭代类型
# read = csvfile.read().decode(errors='ignore')
read = csv.reader(csvfile)
# print(read.shape, read.dtype)
print(read)
for row in read:
print(row['职工姓名'], row['交纳党费'])
data = np.loadtxt(open(r'F:\party\oc_party_new1.csv', 'rb',encoding='utf8'), delimiter=" \n", dtype=str, skiprows=1)
print(data)
print(data.shape, data.dtype)
with open(r'F:\party\oc_party.csv', encoding='gbk') as f:
data = f.read().splitlines()
print(data)
print(data.shape, data.dtype)
with open(r'F:\party\oc_party.csv', 'rb') as csvfile:
reader = csv.DictReader(csvfile)
for row in reader:
if row==0: continue
else:
print(row)
with open(r'F:\party\try2.csv', 'r') as csv_file:
all_line = csv.reader(csv_file)
for one in all_line:
list_file.append(one)
list_file.remove(list_file[0])
all_file = array(list_file)
print(all_file)
'''
#all_file = array(list_file)
#print(all_file)
#rows1 = [row for row in reader1] #print row by row
#print(rows1)
'''
for i,rows in enumerate(reader1):
if i>0:
row = rows
print(row)
with open(r'F:\party\try2.csv') as csvfile:
reader = csv.DictReader(csvfile)
# print(reader)
# rows =[row for row in reader] #两种读取方式,最好是规则的数组(字典型具有标签)
# print(rows)
# for row in reader:
# if row['1'] == '发':
# print(row)
data = np.loadtxt(open(r'F:\party\try2.csv', 'rb'), dtype=np.str, delimiter="\t") #有问题
#print(data)
print(data.shape, data.dtype)
data1=data[0,:].astype(np.float)
print(data1)
'''
结果(涉及隐私,只显示一角):
![]()
![]()

浙公网安备 33010602011771号