2013-02-05 4 views
-1
my_list = [] 
with open(home + "/Documents/stocks/" + filePath , newline='') as f: 
    array1 = (line.split(',') for line in f.readlines()) 
    last_col = [line.split(',')[-1] for line in f] 
    for line in array1:   
     my_list.append(line[-1]) 

이 방법이 효과가 있지만 각 줄의 끝에는 my_list가 \n입니다. 어떻게 제거 할 수 있습니까? 제거한 후 정수형 목록으로 변환하는 방법은 무엇입니까? 나는파이썬에서 목록에서 ' n'을 제거한 다음 목록의 문자열을 정수로 변환합니다.

list(map(int, my_list)) 

같은 일을 시도했지만 나는 때문에 새로운 라인의 오류가 발생합니다.

ValueError: invalid literal for int() with base 10: 'Adj Close\n' 
+0

같은 것이'str.rstrip' \'str.strip'와 비슷합니까? –

+3

CSV 파일 파서를 직접 작성하는 것처럼 보입니다. 그렇게하지 마라. 표준 ['csv'] (http://docs.python.org/3/library/csv.html) 모듈을 사용하십시오. – abarnert

+1

"오류가 발생했습니다"라고 말하지 말고, 오류를 보여주십시오 (추적과 함께). 그리고 게시 한 코드가 실제로 오류를 생성하는지 확인하십시오. 그리고 오류를 나타내는 몇 가지 (간단한) 샘플 입력을 제공하십시오. – abarnert

답변

0

마지막 열을 정수 목록으로 사용하려는 것처럼 보입니다. 그 맞습니까? 그렇다면 : 파이썬에서, int 즐겁게 문자열로 변환됩니다

with open(datafile) as fin: 
    rows = [ [int(x) for x in line.split(',')] for line in fin ] 
    #same as 
    #rows = [ list(map(int,line.split(','))) for line in fin ] #if you prefer ... 

참고 :

with open(datafile) as fin: 
    last_column = [ int(line.split(',')[-1]) for line in fin ] 

트릭을 할해야 ...

당신은 정수의 목록으로 각 행을 원하는 경우 모든 공백 문자 포함 :

>>> print(int('\t\n300\n')) 
300 

그래서 개행 문자는 문제가되지 않습니다 ... g 파이썬 3.2 및 파이썬 2.7)

+0

'목록'개체에 '분할'오류가 없습니다. – aldx1

+1

@ user2018488 - 믿기가 어렵습니다. 나는 위의 코드에서'line'이'list' 타입이되는 것을 전혀 볼 수 없습니다 ... – mgilson

+0

@mgilson : 사실, 그의 _original_ 코드가 그가 묘사하는 방식으로 어떻게 실패 할 수 있는지를 볼 수 없습니다. . 나는 그의 입력이 이제는되어야한다고 생각하며, 그의 오류는 실제로 개 글 라인과 관련이 없다. – abarnert

0

CSV 파일을 구문 분석하려면 마지막 열의 줄 바꿈, 쉼표 주위의 공백과 같은 모든 문제를 다루지 않아도됩니다. 아마도 더 간단하게

my_list = [] 
with open(home + "/Documents/stocks/" + filePath) as f: 
    for row in csv.reader(f): 
     numbers = list(map(int, row)) 
     my_list.append(line[-1]) 

또는 : 파이썬과 함께 제공되는 csv 모듈 사용

with open(home + "/Documents/stocks/" + filePath) as f: 
    my_list = [list(map(int, row)) for row in csv.reader(f)] 

이 목록의 이해와 혼합을 선하지만,이 경우에는, 저에게 조금 놀라운 보이는 map 하나 위에 , 나는 그것이 조금 더 좋아 보인다라고 생각한다. 순수 이해 대안 : 순수한 기능적인 대안보다는

with open(home + "/Documents/stocks/" + filePath) as f: 
    my_list = [[int(col) for col in row] for row in csv.reader(f)] 

그리고 훨씬 더는 :

my_list = list(map(compose(list, partial(map, int)), 
        csv.reader(iterwith(open(home + "/Documents/stocks/" + filePath))))) 
0

기존 코드는 당신이 뭘하려는 건지에 대한 잘 작동합니다.

는 자체 포함하기 위해, 나는 StringIO으로 프로그램에 파일을 이동하지만, 그렇지 않으면,이 코드는 단어, 단어입니다

import io 

f = io.StringIO('''1, 2, 3 
4, 5, 6 
''') 

my_list = [] 
array1 = (line.split(',') for line in f.readlines()) 
last_col = [line.split(',')[-1] for line in f] 
for line in array1:   
    my_list.append(line[-1]) 

print(list(map(int, my_list))) 

를 그리고 여기가하는 작업은 다음과 같습니다

[3, 6] 

원하는 것은 정확히 무엇입니까?

그래서 작동하지 않는다면, 개행 때문에 아닙니다. 그것은 다른 무엇 때문입니다. 그리고 당신은 오류가 무엇인지 또는 "새로운 라인으로 인해 오류가 생깁니다"라는 것을 넘어서는 어떠한 것도 말하지 않았으므로 아무도 다른 무엇이 있을지 짐작할 수 없습니다. 어쩌면 당신은 3.6을 가지고 있고, 당신은 ValueError: invalid literal for int() with base 10: '3.6'이 될 것입니다. 어쩌면 지정된 경로에 파일이없고 FileNotFoundError 오류가 발생했을 수 있습니다.어쩌면 shebang을 잊어 버리고 Python 2.x 인터프리터 또는 bash로 Python 3.x 스크립트를 실행하고있을 수도 있습니다. 당신이 우리에게 말한 것에 근거하여 어떤 것도 가능합니다.

+0

내 생각에 파일에 끝 부분에 빈 줄이 표시되고, 우리가 보지 못했던 오류 메시지는'ValueError : 밑줄이 10 인 int()에 대한 리터럴이 잘못되었습니다 : '\ n "하지만 누가 말할 수 있습니까? 또한 줄의 끝 부분에 여분의','이 될 수도 있지만, 아마도 추측은 매우 생산적이지는 않습니다. – DSM

관련 문제