2013-11-15 172 views
0

上午所有, 首先我读过的帖子,类似于这样的问题,但它并没有解决我的问题。Python的csv文件阅读器不读整个文件

我有3个CSV文件(代理-4393的行;跳过-27761的行;自卸车-19118行)。 每个csv文件由相同的功能如下:

长话短说:(含有4393行)

经纪人csv文件产生的1359行的列表。 MISSING(含有27761行)

跳过csv文件产生的27761行的列表。 (含有19118行)FINE

翻斗csv文件产生的19118行的列表。 FINE

任何人都设法找到解决办法?

[见下文费用]

import os, re, csv 

# -------------------------------------- General Functions -------------------------------------- # 
# function: find journey summary file 
def FileFinder(fl, begin): 
    regex = begin 
    pattern = re.compile(regex) 
    for f in fl: 
     if re.findall(pattern, f): #empty seq = False 
      global found; 
      found = re.findall(pattern, f) 

# function: read from 'Enquiry-...' 
def ReadEnquiry(): 
    with open(d + found[0], "r") as fR: 
     r = csv.reader(fR) 

     # capture data from csv file into 'clist' 
     for row in r: 
      global rlist; 
      rlist.append(row) 
    fR.close() 
# ----------------------------------------------------------------------------------------------- # 
# --------------------------------------- Broker Functions -------------------------------------- # 
# function: Find and Read from BrokerExport. 
def BrokerExp(): 
    FileFinder(filelist, 'BrokerExport.*') 
    ReadEnquiry() 
    CreateBrokerList(rlist, 48, 17, 74, brokerlist) 

# function: create a list of broker data. Format: Account Number,Date,Price(ex-VAT),Profit 
def CreateBrokerList(rlist, col1, col2, col3, expList): 
    for row in rlist: 
     if row[41] == '':   # exclude jobs that were cancelled. 
      expList.append([row[col1], row[col2], row[col3]]) 
# ----------------------------------------------------------------------------------------------- # 
# ---------------------------------------- Skip Functions --------------------------------------- # 
# function: Find and Read from SkipsExport. 
def SkipExp(): 
    FileFinder(filelist, 'SkipsExport.*') 
    ReadEnquiry() 
    CreateSkipList(rlist, 2, 42, 46, skiplist) 

# function: create a list of skip data. Format: Account Number,Date,Price(ex-VAT),Profit 
def CreateSkipList(rlist, col1, col2, col3, expList): 
    for row in rlist: 
     expList.append([row[col1], row[col2], row[col3]]) 
# ----------------------------------------------------------------------------------------------- # 
# ---------------------------------------- Skip Functions --------------------------------------- # 
# function: Find and Read from TipperExport. 
def TipperExp(): 
    FileFinder(filelist,'TipperExport.*') 
    ReadEnquiry() 
    CreateSkipList(rlist,3,4,34,tipperlist) 

# function: create a list of tipper data. Format: Account Number,Date,Price(ex-VAT),Profit 
def CreateTipperList(rlist, col1, col2, col3, expList): 
    for row in rlist: 
     expList.append([row[col1], row[col2], row[col3]]) 
# ----------------------------------------------------------------------------------------------- # 

# --- General Variables --- # 
rlist = [];        # 'rlist' list read from csv. 
found = ''        # string to hold filename found through 'FileFinder()' 
d = 'U:/rmarshall/To Do/'     # directory to use 
headings = ['Company Name', 'Rep', \ 
     'Month 1 Calls', 'Month 1 Inv Tots', 'Month 1 No. of Invs', \ 
     'Month 2 Calls', 'Month 2 Inv Tots', 'Month 2 No. of Invs', \ 
     'Month 3 Calls', 'Month 3 Inv Tots', 'Month 3 No. of Invs', \ 
     'Month 4 Calls', 'Month 4 Inv Tots', 'Month 4 No. of Invs', \ 
     'Month 5 Calls', 'Month 5 Inv Tots', 'Month 5 No. of Invs', \ 
     'Month 6 Calls', 'Month 6 Inv Tots', 'Month 6 No. of Invs', \ 
     'Month 7 Calls', 'Month 7 Inv Tots', 'Month 7 No. of Invs', \ 
     'Month 8 Calls', 'Month 8 Inv Tots', 'Month 8 No. of Invs', \ 
     'Month 9 Calls', 'Month 9 Inv Tots', 'Month 9 No. of Invs', \ 
     'Month 10 Calls', 'Month 10 Inv Tots', 'Month 10 No. of Invs', \ 
     'Month 11 Calls', 'Month 11 Inv Tots', 'Month 11 No. of Invs', \ 
     'Month 12 Calls', 'Month 12 Inv Tots', 'Month 12 No. of Invs'] 
cp=[headings]; da=[headings]; mb=[headings]; apd=[headings]; bobs=[headings] # separate Rep lists 
filelist=os.listdir(d)               # place directory filenames into a list 
dlist=[]; brokerlist=[]; skiplist=[]; tipperlist=[]; book1=[]     # lists used throughout code 
brklist=[]; skplist=[]; tprlist=[]            # a list of names 
# ------------------------- # 

# --- main --- # 
Enquiry_Main()   # call 'Enquiry_Main()' to run all work to create 'cp,da,mb,apd,bob' list data. 
rlist=[]; dlist=[]  # reset lists 
print('1') 
BrokerExp()    # call 'BrokerExp()' to run all work to create 'brokerlist' data. 
rlist=[]    # reset list 
print('2') 
SkipExp()    # call 'SkipExp()' to run all work to create 'skiprlist' data. 
rlist=[]    # reset list 
print('3') 
TipperExp()    # call 'TipperExp()' to run all work to create 'tipperlist' data. 
rlist=[]    # reset list 

a=0 
for row in brokerlist:a+=1 
print(a) 

a=0 
for row in skiplist:a+=1 
print(a) 

a=0 
for row in tipperlist:a+=1 
print(a) 
+0

一件小事情,'fR.close()'行是不必要的,因为'with'语句处理打开和关闭文件。 – darthbith

回答

0

答案是,有一个与CSV阅读器没有问题。看代码后,我看到了下面一行:

if row[41] == '':   # exclude jobs that were cancelled. 

名单产生1359分的结果,而不是4393,因为差异被排除通过上面的代码行。

0

您使用了大量全局的无处不在,它在你的程序复杂化。函数可以创建和返回过滤列表,以便您可以重用它们并将其作为输入传递给另一个函数,该函数还会过滤其他参数。

该函数创建本地列表expList并不返回任何内容。 CreateSkipList,CreateTipperList函数也是一样。

def CreateBrokerList(rlist, col1, col2, col3, expList): 
     for row in rlist: 
     if row[41] == '':   # exclude jobs that were cancelled. 
      expList.append([row[col1], row[col2], row[col3]]) 

列表举例在适当的方式返回:

def ReadEnquiry(file_to_read, rlist): 
    with open(file_to_read, "r") as fR: 
     r = csv.reader(fR) 
     for row in r: 
      rlist.append(row) 
    return rlist 

用例:

rlist = [] 
read_list = ReadEnquiry(d + found[0], rlist) 
# pass read_list to other function as parameter 
brokerlist = [] 
CreateBrokerList(read_list, 48, 17, 74, brokerlist)