2016-12-01 5 views
0

주위에 공백이있는 열의 요소를 캡처하는 방법은 무엇입니까?

300  january  10  20  
    300  februari 120,30 10  
    300  march  20,30  10  
    300,10  april  20,30 10  
    300  may   420,10 10,46 

나는 열을 다시 정렬 할 수 있습니다.
내가하는 첫 번째 작업은 구분 기호를 사용하여 텍스트 사이의 열을 구분하는 것입니다. 체육.
(?<=\S)(\s{2,})(?=\S) 또는 (?<=\S)(\s{1,})(?=\S)


그때 나는이 같은 목록에 열을 넣어하려면 :

|300 | |january | | 10 | |20 | 
    |300 | |februari| |120,30| |10 | 
    |300 | |march | |20,30 | |10 | 
    |300,10| | april | | 20,30| |10 | 
    |300 | |may  | |420,10| |10,46| 

예상 출력 :

mylist = [['300 ','january ',' 10 ','20 '] 
      ['300 ','februari','120,30','10 '], 
      ['300 ','march ','20,30 ','10 '], 
      ['300,10',' april ',' 20,30','10 '], 
      ['300 ','may  ','420,10','10,46']] 

나는 방법을 캡처하는 방법 아무 생각이 없다 공백

#find the max length of an element in a column 
lengte_temp = [[len(x) for x in row] for row in mylist] 
maxlengthcolumn = max(l[len(mylist[0])-1] for l in length_temp) 

#add spaces to elements 
for b in range(0,len(mylist)): 
    if length_temp[b][len(mylist[-1])-1] < maxlengthcolumn: 
    mylist[b][len(mylist[-1])-1] = mylist[b][len(mylist[-1])-1] + ' '*(maxlengthcolumn-length_temp[b][len(mylist[-1])-1]) 

을 그러나 이것은 열에있는 원소 전에 공간을 제거 :

I 세퍼레이터의 사용 후에 공백 포착이 시도.

위의 예와 같이 목록의 요소를 캡처하려면 어떻게해야합니까?

+0

은'csv' 모듈을? –

+0

@Chris_Rands, 내 생각에 csv 모듈은 공백을 존중하지 않습니다. (공백을 제거하고 나중에 요소 사이에 공백 수를 넣어 문자열을 조인) – Reman

+0

그냥 str.split() 메서드를 사용할 수 없습니까? 내가 틀리지 않으면 그것은 공간을 보존한다. – Zafi

답변

1

문자열로 작업한다고 가정하면 'ord'를 사용하여 ascii 값을 얻고 alphas와 숫자가 시작되고 끝나는 문자열을 분리 할 수 ​​있습니다.

것은 그것을 무너 뜨리는 : (? 내가 원래 텍스트가 .txt 인이 될 수 것 같습니다 읽은에서)

  1. 섭취 시간에 텍스트 하나의 각 줄을 당신이 파일을 사용할 수 있습니다 가져올 난 단어/숫자는 (을 시작할 경우 (즉, herehere에 대한 자세한)/O 방법
  2. 패스 각각의 문자열로 라인과 별도의 변수
  3. 설정 로직이 값을 저장 ord()를 사용하여 ASCII 값으로 변환 확인합니다 알파 또는 숫자 뒤에 0 또는 그 이상의 알파/숫자가 오는 패턴을 찾고 있어야합니다. 그 다음에 공백이오고 그 공백이 나면 다른 알파 또는 숫자를 찾아야합니다. 각 시작 위치 (문자열의 첫 번째 또는 일련의 공백 뒤에 오는 첫 번째 알파/숫자로 정의 된 시작 부분)를 저장하십시오.
  4. 현재 작업중인 텍스트 행을 색인하고 원하는 문자열을 꺼냅니다.

이 불분명 수 있으므로 아래의 사이비 코드가 표시 될 수 있습니다

strings_start = [5, 12, 22] # this would be where the words/numbers begin in the string that holds a line of your text 
# we'll assume you have some variable, line, which holds the current line of the text you're parsing in a loop 
for i in range(len(strings_start)): 
    if i < len(strings_start) - 1 # subtract 1 because indexes start at 0 
     string_list[i] = line[i: i + 1] 
    else: 
     string_list[i] = line[i:]