笔记,字符串(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)
'''
 

结果(涉及隐私,只显示一角):

 

posted @ 2016-11-02 16:27  CC_python  阅读(54)  评论(0)    收藏  举报