2017-09-14 65 views
0

我有這段代碼可以讓我計算Python 3.6中腳本的csv中缺失的數字行數。然而,這些程序中的以下錯誤:Python 3中的ValueError代碼

錯誤:

Traceback (most recent call last): 
    File "C:\Users\GapReport.py", line 14, in <module> 
    EndDoc_Padded, EndDoc_Padded = (int(s.strip()[2:]) for s in line) 
    File "C:\Users\GapReport.py", line 14, in <genexpr> 
    EndDoc_Padded, EndDoc_Padded = (int(s.strip()[2:]) for s in line) 
ValueError: invalid literal for int() with base 10: 'AC-SEC 000000001' 

代碼:

import csv 

def out(*args): 
    print('{},{}'.format(*(str(i).rjust(4, "0") for i in args))) 

prev = 0 
data = csv.reader(open('Padded Numbers_export.csv')) 

print(*next(data), sep=', ') # header 

for line in data: 
    EndDoc_Padded, EndDoc_Padded = (int(s.strip()[2:]) for s in line) 

if start != prev+1: 
    out(prev+1, start-1) 

prev = end 
    out(start, end) 

我難倒就如何解決這些issues.Also,我覺得CSV其中有很多行,所以如果有一個部分將其限制爲幾個數字,請隨時更新我的​​內容。

CSV片段(很抱歉,如果我沒有明確之前!):

CSV Snippet

+0

錯誤是告訴你,你不能將'AC-SEC 000000001'轉換爲一個整數。這是有道理的。但是,我們無法看到CSV的示例,因此我們無法幫助解決該問題。 – roganjosh

+0

我最近編輯了一張csv的圖片。希望有所幫助。 – PythonGroupie

+0

這只是一個猜測,但是基於這個例子,它看起來像你可能想要''EndDoc_Padded1,EndDoc_Padded2 =(int(s.split()[1])。 – 0x5453

回答

0

你在你的CSV文件具有的值不是數字。例如,FMAC-SEC 000000001不是一個數字。因此,當您運行int(s.strip()[2:])時,它無法將其轉換爲int

在代碼中的一些更多的評論:

  1. 什麼是做EndDoc_Padded, EndDoc_Padded = (...)的效用?目前,您正將值分配給兩個具有相同名稱的變量。要麼將其中一個名稱命名爲其他名稱,要麼只有一個變量。

  2. 您是否試圖從每列中獲取兩個不同的值?在這種情況下,您需要首先將line分爲兩部分。你的文件逗號的內容是分開的嗎?如果是,則執行for s in line.split(','),否則使用split()中的相應分隔符值。

  3. 您正在循環內部運行此操作,因此每次兩個變量的值都會更新爲最後一行的值。如果你想獲得所有值的2個列表,那麼這將不起作用。

+0

謝謝!因爲此刻現在被列爲語法錯誤。 – PythonGroupie

+0

我愚蠢,它應該是Control Number_Padded和 EndDoc_Padded。 – PythonGroupie

+0

看到我編輯的答案,並在你的問題進行更正。 – Antimony