2016-12-06 3 views
-1

python 스크립트를 작성하는 데 문제가 있습니다. 구체적으로 말하자면, 숫자 문자열을 가지고 있고 '0'이라는 단어를 정수 0으로 대체하려고합니다.이 문자열을 float 값으로 커버하고 싶습니다. data.replace를 사용 했으므로 0을 중심으로 ""넣어야합니다. 그렇지 않으면 문자 버퍼 객체를 예상 할 때 오류가 발생합니다. 나는 float로 변환하기 전에 0에서 스트립을 제거 할 수 있다고 말하고 있습니까?문자열을 부동으로 변환 할 때 오류가 발생했습니다.

> for data in inFile: 
> data = data.replace ("zero", "0") 

> data = map(float,data.strip('"'))                

ValueError: could not convert string to float: s

이것은 값리스트에 걸리는 큰 스크립트의 일부분이다.

C8098283  1  8268 asx1.1_ox1.0.loc.00001 .  + zero zero zero 11.701 12.801 13.91 

많은 감사

추신 : 나는 내 입력 파일은 다음과 같습니다 최초의 100

inFile = gzip.open('path','rb') 

inpNorm = 0.5 
samNorm = 1 

inFile.next() 
for line in inFile: 
     cols = line.strip().split('\t') 
     data = cols[6:] 
     for data in inFile: 
       data = data.replace("zero",0) 
     data = map(float,data.strip('"')) 

     inputVals = [x * inpNorm for x in data[:100]] 
     h3k27Vals = [x * samNorm for x in data[100:]] 

     normVals = [h327Vals[i] - inputVals[i] for i in len(inputVals)] 

     print '\t'.join(cols[:6]) + '\t'.join(map(str,normVals)) 

inFile.close() 

에서 주어진 라인이 목록의 마지막 (100 개) 값을 빼기 할 이것이 충분히 명확하지 않은 경우에 정말로 미안합니다. 임씨는 프로그래밍과 스택 오버플로에 대해 매우 새롭다.

+2

예를 들어 입력하십시오. –

+0

데이터 파일에 유령이있는 것 같습니다. – Iluvatar

+0

변환시 더 명확하게 표시 할 수 있습니까? 당신은'''을 제거하지 않아도됩니다. –

답변

0

다음은 몇 가지 제안 사항입니다.

line = "8268 asx1.1_ox1.0.loc.00001 .  + zero zero zero 11.701 12.801 13.91" 
print("Input: '{}'".format(line)) 

converted_line = "0".join(line.split('zero')) # Split the line where you have 'zero' and rebuild the string with '0' 
print("Converted line: '{}'".format(converted_line)) 

값을 변환하고 싶다고하셨습니다. 줄에 두 개의 부동 항목이 있지만 마지막 6 개의 값은 흥미로운 것으로 보입니다. (즉 data = map(float, converted ...)) 당신은뿐만 아니라 배열에 저장할 수 있습니다, 물론

v1, v2, v3, v4, v5, v6 = map(float, converted_line.rstrip().split()[4:]) 
# .split() with no argument splits on whitespace 
# .rstrip() is to remove trailing '\n' (newlines), which are common when parsing files 
print("Data:", v1, v2, v3, v4, v5, v6) 

: 나는 일반적으로 값을 압축을 풉니 다. 모두 함께 실행하면 실제 문제를 해결하기 위해 출력

Input: '8268 asx1.1_ox1.0.loc.00001 .  + zero zero zero 11.701 12.801 13.91' 
Converted line: '8268 asx1.1_ox1.0.loc.00001 .  + 0 0 0 11.701 12.801 13.91' 
Data: 0.0 0.0 0.0 11.701 12.801 13.91 
또한

를, 산출한다. 지금은 파일의 서로 다른 위치에서 (즉, 0 -> 100, 1 -> 101, 2 -> 102 등으로 이동) 읽고 싶습니다. 이것은 약간 성가 시며 실제로 그렇게 효율적이지 않습니다. 파일 크기가 너무 크지 않은 경우 (어쩌면 < 1M 라인 또는 기타), 전체 파일을 읽고 계산을 수행 한 다음 데이터로 원하는 것을 수행 할 것을 권장합니다. 유사 코드로

col1 = [] 
col2 = [] 
... 

for line in file.readlines(): 
    v1, v2, ... = map(float, converted_line.rstrip().split()[...]) 
    col1.append(v1) 
    col2.append(v2) 
    ... 

# Now do your data manipulation of the parsed data that you find in `col1`, `col2`, etc 
관련 문제