2013-08-28 4 views
0

20 번째와 21 번째 필드에서 정렬하려는이 CSV 파일이 있습니다. 예를 들어 해당 필드의 데이터는 P1, PK5입니다. 나의 도전은 내가 그 분야에서 분류 할 때 그들이 좋아할 것 인 것처럼 그들은 질서가 없다는 것이다. 해당 필드를 가장 긴 값으로 채워야하는 것처럼 보입니다.csv 값을 0으로 채우기

OrderNum,MerrillRecipientID,CustomerClass,MerrillItemNum,PODTemplateID,GridCode,AetnaDocID,MemberID,FirstName,MI,LastName,Address1,Address2,Address3,City,State,Zip,Country,OEL,PalletNum,PckgNum,IMBCode,ProcDate 
"M394993","M39499300010000001","0GH","3GH000503","PDP","BO","1011250","MEBB04CB","Name","","Name","address","","","City","SC","29170-2043","","*******AUTO**SCH 5-DIGIT 29033","P1","PK5","2031100094470495539729170204309","3GH000503","August 26, 2013" 
"M394993","M39499300010000002","0GH","3GH000503","PDP","BO","1011572","MEBB07GB","Name","G","Name","address","","","City","SC","29020-2912","","*********AUTO**SCH 3-DIGIT 290","P1","PK1","3031100094470495580529020291210","3GH000503","August 26, 2013" 
"M394993","M39499300010000003","0GH","3GH000503","PDP","BO","1011693","MEBB08MP","Name","B","Name","address","","","City","SC","29061-9447","","*********AUTO**SCH 3-DIGIT 290","P1","PK2","3031100094470495583729061944757","3GH000503","August 26, 2013" 
"M394993","M39499300010000004","0GH","3GH000503","PDP","BO","1011751","MEBB097M","Name","A","Name","address","","","City","SC","29645-0433","","*************AUTO**3-DIGIT 296","P1","PK31","3031100094470495629629645043333","3GH000503","August 26, 2013" 
"M394993","M39499300010000005","0GH","3GH000503","PDP","BO","1012075","MEBB0K4L","Name","E","Name","address","","","City","SC","29682-9634","","*************AUTO**3-DIGIT 296","P1","PK33","3031100094470495637929682963428","3GH000503","August 26, 2013" 
"M394993","M39499300010000006","0GH","3GH000503","PDP","BO","1012437","MEBB0TWQ","Name","R","Name","address","","","City","SC","29505-3030","","*******AUTO**SCH 5-DIGIT 29501","P1","PK24","2031100094470495556429505303050","3GH000503","August 26, 2013" 
"M394993","M39499300010000007","0GH","3GH000503","PDP","BO","1012750","MEBB0YJY","Name","L","Name","address","","","City","SC","29642-3006","","***********AUTO**5-DIGIT 29642","P1","PK38","2031100094470495567529642300601","3GH000503","August 26, 2013" 

그래서 위의 데이터에서 나는 파일이 너무 모습이 필요합니다 :

OrderNum,MerrillRecipientID,CustomerClass,MerrillItemNum,PODTemplateID,GridCode,AetnaDocID,MemberID,FirstName,MI,LastName,Address1,Address2,Address3,City,State,Zip,Country,OEL,PalletNum,PckgNum,IMBCode,ProcDate 
"M394993","M39499300010000001","0GH","3GH000503","PDP","BO","1011250","MEBB04CB","Name","","Name","address","","","City","SC","29170-2043","","*******AUTO**SCH 5-DIGIT 29033","P1","PK05","2031100094470495539729170204309","3GH000503","August 26, 2013" 
"M394993","M39499300010000002","0GH","3GH000503","PDP","BO","1011572","MEBB07GB","Name","G","Name","address","","","City","SC","29020-2912","","*********AUTO**SCH 3-DIGIT 290","P1","PK01","3031100094470495580529020291210","3GH000503","August 26, 2013" 
"M394993","M39499300010000003","0GH","3GH000503","PDP","BO","1011693","MEBB08MP","Name","B","Name","address","","","City","SC","29061-9447","","*********AUTO**SCH 3-DIGIT 290","P1","PK02","3031100094470495583729061944757","3GH000503","August 26, 2013" 
"M394993","M39499300010000004","0GH","3GH000503","PDP","BO","1011751","MEBB097M","Name","A","Name","address","","","City","SC","29645-0433","","*************AUTO**3-DIGIT 296","P1","PK31","3031100094470495629629645043333","3GH000503","August 26, 2013" 
"M394993","M39499300010000005","0GH","3GH000503","PDP","BO","1012075","MEBB0K4L","Name","E","Name","address","","","City","SC","29682-9634","","*************AUTO**3-DIGIT 296","P1","PK33","3031100094470495637929682963428","3GH000503","August 26, 2013" 
"M394993","M39499300010000006","0GH","3GH000503","PDP","BO","1012437","MEBB0TWQ","Name","R","Name","address","","","City","SC","29505-3030","","*******AUTO**SCH 5-DIGIT 29501","P1","PK24","2031100094470495556429505303050","3GH000503","August 26, 2013" 
"M394993","M39499300010000007","0GH","3GH000503","PDP","BO","1012750","MEBB0YJY","Name","L","Name","address","","","City","SC","29642-3006","","***********AUTO**5-DIGIT 29642","P1","PK38","2031100094470495567529642300601","3GH000503","August 26, 2013" 

P1 필드 P100 될 수 있고 그래서 P001에 패드 P1해야합니다. 그러나 실제로 그것은 최대 길이가 무엇이든 될 필요가 있습니다. 두 필드에서 파일을 정렬 할 수 있지만 패드를 두는 방법을 모릅니다.

미리 도움을 주셔서 감사합니다.

+2

어떤 환경에 있습니까? csv 파일 자체를 수정 하시겠습니까? 파이썬, 펄, 또는 그와 비슷한 것으로? 더 많은 정보가 필요합니다! – simon

+0

질문에 대답하려면 .csv에 액세스 할 때 사용하는 프로그래밍 언어 나 도구에 대한 아이디어가 필요합니다. 데이터베이스 유형 (Oracle, MSSQL, mySql 등)을 아는 것도 도움이됩니다. Q : 기존 CSV를 읽으려고합니다 (.csv를 쓰거나 수정하지 마십시오)? – paulsm4

+0

죄송합니다, 저는 리눅스 시스템입니다. 수세. 쉘 스크립트로 CSV 파일을 수정하고 싶습니다. 그 필드에 가장 긴 값이 무엇이든간에이 두 필드를 채우려면 CSV를 수정하려고합니다. – GroveTuckey

답변

1

좋아, 다른 아무것도 차기 없었다 때문에, 여기 당신이 필요로 할 것입니다 빠른 파이썬 (2.x 또는 3.x를) 스크립트입니다 :

import sys 
import csv 

reader = csv.reader(sys.stdin) 
writer = csv.writer(sys.stdout, quoting=csv.QUOTE_ALL) 

rows = [row for row in reader] 
max_len = max([len(row[20]) for row in rows[1:]]) 

writer.writerow(rows[0]) 
for row in rows[1:]: 
    while len(row[20]) < max_len: 
     row[20] = 'PK0' + row[20][2:] 
    writer.writerow(row) 

당신이 말로이를 저장하는 경우는, pad.py

$ cat /path/to/my_csv_file.csv | python /path/to/pad.py > /path/to/my_new_csv_file.csv 

그리고 당신이 필요로하는 형식으로 my_new_csv_file.csv을 만들 것입니다, 당신은과 같이 사용할 수 있습니다. 스크립트는 stdin에서 작동하고 stdout으로 출력되므로 용도에 맞게 여러 가지 방법으로 사용할 수 있습니다.

희망이 도움이됩니다.

관련 문제