2015-07-06 28 views
0

我在閱讀python中的csv文件時遇到了問題,而只打印標題/列名稱被反覆打印並且數據未打印。如何讀取csv文件並在一些處理後打印數據?

輸出僅包含列名稱。行值不會被打印。請幫助我解決問題。

我的代碼如下。

import csv 
import sys 
import datetime 
import math 
import re 

f=open('VehicleMaster.csv','r') 
try: 
    reader=csv.DictReader(f,delimiter=',') 
    num=' ' 
    regx= re.compile('[,-/]') 
    for row in reader: 
     dt1=row['Date_Registered'] 
     for xd in dt1.splitlines(): 
      d,m,y=regx.split(xd) 
      dt2=('/'.join((d.zfill(2),m,'20'+y.zfill(2) if len(y)==2 else y))) 
      row['Date_Registered']=dt2 
      dt3= str(datetime.datetime.strptime(dt2,'%d/%b/%Y').date()) 
      #print(dt3) 
      row['Date_Registered']=dt3![enter image description here][1] 
      #print(row) 
      print(num, '\t'.join(row)) 
      if num == ' ': 
        num=0 
      num=num+1 

輸出: -

Workstream_from_AL Manager work_steam risk_score Base Count Total_Downtime_Hours Class Vehicle_Description C111111 Total_Maint_Costs Date_Registered smr Workstream Latest_Mileage Base_Location Major_Repair_ Average_Downtime_Hours Age_in_Months__17_Mar_15_ Status Ob_Board_Power_ No_of_SMR_Jobs Reg_Number down_time Cost_Centre mileage Workshop age Date_of_Reading 
1 Workstream_from_AL Manager work_steam risk_score Base Count Total_Downtime_Hours Class Vehicle_Description C111111 Total_Maint_Costs Date_Registered smr Workstream Latest_Mileage Base_Location Major_Repair_ Average_Downtime_Hours Age_in_Months__17_Mar_15_ Status Ob_Board_Power_ No_of_SMR_Jobs Reg_Number down_time Cost_Centre mileage Workshop age Date_of_Reading 
2 Workstream_from_AL Manager work_steam risk_score Base Count Total_Downtime_Hours Class Vehicle_Description C111111 Total_Maint_Costs Date_Registered smr Workstream Latest_Mileage Base_Location Major_Repair_ Average_Downtime_Hours Age_in_Months__17_Mar_15_ Status Ob_Board_Power_ No_of_SMR_Jobs Reg_Number down_time Cost_Centre mileage Workshop age Date_of_Reading 
3 Workstream_from_AL Manager work_steam risk_score Base Count Total_Downtime_Hours Class Vehicle_Description C111111 Total_Maint_Costs Date_Registered smr Workstream Latest_Mileage Base_Location Major_Repair_ Average_Downtime_Hours Age_in_Months__17_Mar_15_ Status Ob_Board_Power_ No_of_SMR_Jobs Reg_Number down_time Cost_Centre mileage Workshop age Date_of_Reading 

輸入: - 計數Reg_Number狀態Vehicle_Description Date_Registered Age_in_Months__17_Mar_15_ Latest_Mileage Date_of_Reading No_of_SMR_Jobs Total_Downtime_Hours Average_Downtime_Hours Total_Maint_Costs Major_Repair_經理Cost_Centre Ob_Board_Power_類車間Base_Location C111111年齡里程SMR down_time work_steam risk_score工作流Workstream_from_AL基地

1 PN57KTE電流 - 安路利蘭DAF LF45 160天6.0明鏡可能20 - 08 81.92876712 195591 2月15 30 110.83 3.694333333 14269.36大型起重機修理£5,093.45工作沒有V79166 GORDON THOMPSON 40001072號HGV東北卡車&凡有限公司T恤 - 修復1個0修復三通

1 YP09LFX電流 - 安路福特全順350 2.4 TDi的明鏡/文10月09 69.23835616 62589 9月 - 15 10 169.5 16.95 6166.99新引擎&噴射£4,287.57工作否V81240 BARRY WATSON 40001032是的LCV Kestrel Truck Services Limited北泰恩 - 修理1 0.961643836 1.11E-05 3.548325662 3.941860465 1 9.451841074修理北泰恩 1 YP09KZK當前 - 道路福特TRANSIT 350 2.4 TDi Der/Man 24-Jun -09 68.77808219 77171 12-JAN-15 12 40.25 3.354166667 5867.05新引擎£5,499.87工作沒有V78692巴里·沃森40001032 YES LCV Howdon北泰恩 - 修復1 0.955251142 1.11E-05 3.375747986 0.78003876 1 6.111048999修繕修繕北泰恩

1 YP09LCL當前 - 在道路福特TRANSIT 350 2.4 TDi Der/Man 2009年7月1日68.54794521 68703 19-Jan-15 10 101.25 10.125 8521.22新引擎£6,450.14工作否V85143 JOHN RICHARDSON 40001053是LCV S Jennings Ltd磨損 - 修理1 0.952054795 1.11E -05 4.902888377 2.354651163 1 9.209605446修理修理磨損

+0

你能否提供輸入文件樣本 – The6thSense

+0

plz讓你的代碼在這篇文章中更具可讀性 –

+0

在輸入數據時首先是列名然後是數據。 – vijay

回答

0

它的發生,因爲你使用csv.DictReader - 在迭代在其內容會row變量將是dict類型的實例。 當您迭代dict(在join字符串方法中)時,您正在遍歷其鍵值(即行的名稱),而您想遍歷其值。

所以,你應該用print(num, '\t'.join(row.values()))替換print(num, '\t'.join(row))

注意:標準python字典是無序的。我不記得是否csv模塊使用OrderedDict或任何類似的。

+0

謝謝kammala的幫助。 – vijay

+0

Kammala可以幫助我做更多的事情,比如在此之後,我需要生成從最低日期到2021年9月的月份序列。例如說我的日期欄包含日期,如2009-05-02,2008-11-24,2009-09-23 ..等等。我必須生成每年和每個月,直到提到的日期。請在這種情況下幫助我。 – vijay

+0

我不能完全理解你想要什麼,但我建議你學習更多關於[python中的生成器](https://wiki.python.org/moin/Generators)和[list comprehensions](https:// docs.python.org/2/tutorial/datastructures.html#list-comprehensions)。還有一個很棒的包[dateutil](https://dateutil.readthedocs.org/en/latest/),它可以生成具有理想區別的日期列表(例如,每月), – kammala

相關問題