2016-10-28 6 views
1

私は古いDayLite連絡先をOutlookにインポートするためのCSV形式に変換するPythonスクリプトを書いています。 1つの小さな問題を除いて完全にほぼ完全に機能するスクリプトがありますが、大量のデータを修正することにより、ファイル内でそれを修正することが長くなるでしょう。ファイルにランダムな損失とゲイン0を書き込む

連絡先のリストは、スプレッドシートの非常に長い1,100+行です。テキストがCSVファイルに書き込まれると、特定の/ランダムな電話番号が先頭の0を失い、最後に「.0」を得ることを除いて、すべてが良好です。しかし、電話番号の大部分は正確な形式で残されています。

これは私のスクリプトコードです:

import xlrd 
import xlwt 
import csv 
import numpy 

########################## 
# Getting XLS Data sheet # 
########################## 

oldFormatContacts = xlrd.open_workbook('DayliteContacts_Oct16.xls') 
ofSheet = oldFormatContacts.sheet_by_index(0) 

################################## 
# Storing values in array medium # 
################################## 

rowVal = [''] * ofSheet.nrows 

x = 1 

for x in range(ofSheet.nrows): 
    rowVal[x] = (ofSheet.row_values(x)) 

###################### 
# Getting CVS titles # 
###################### 

csvTemp = xlrd.open_workbook('Outlook.xls') 
csvSheet = csvTemp.sheet_by_index(0) 
csv_title = csvSheet.row_values(0) 

rowVal[0] = csv_title 

############################################################## 
# Append and padding data to contain commas for empty fields # 
############################################################## 

x = 0 
q = '"' 

for x in range(ofSheet.nrows): 
    temporaryRow = rowVal[x] 
    temporaryRow = str(temporaryRow).strip('[]') 
    if x > 0: 
     rowVal[x] = (','+str(q+temporaryRow.split(',')[0]+q)+',,'+str(q+temporaryRow.split(',')[1]+q)+',,'+str(q+temporaryRow.split(',')[2]+q)+',,,,,,,,,,,,,,,,,,,,,,,,,,'+str(q+temporaryRow.split(',')[4]+q)+','+str(q+temporaryRow.split(',')[6]+q)+',,,,,,,,,,,,,,,,,,,,,,,,,'+str(q+temporaryRow.split(',')[8])+q) 

    j = 0 
    for j in range(0,21): 
     rowVal[x] += ',' 
    tempString = str(rowVal[x]) 
    tempString = tempString.replace("'","") 
    #tempString = tempString.replace('"', '') 
    #tempString = tempString.replace(" ", "") 
    rowVal[x] = tempString 

###################################### 
# Open and write values too new file # 
###################################### 

csv_file = open('csvTestFile.csv', 'w') 

rownum = 0 

for rownum in range(ofSheet.nrows): 
    csv_file.write(rowVal[rownum]) 
    csv_file.write("\n") 

csv_file.close() 

申し訳ありませんが、私のコードは、私はPythonスクリプトに初心者です支離滅裂である場合。

残念ながら私はプライバシーの理由から連絡先の詳細を表示したり提供することはできませんが、正確な形式でいくつか例を挙げておきます。

のでDayLite文書に接点が例えば「最初の名前、第二に名前、会社、電話番号1、電話番号2、Eメール」として保存されます: 「ジョー、ブラック、スタックオーバーフロー、07472329584、」 CSVファイルに書き込まれるときは "Joe"、 "Black"、 "Stack Overflow"、 "7472329584.0"になります。

この問題が発生するたびに、10個ほどの細かい数字が正確に同じに保存されるため、これは奇妙です。 DayLite: "+446738193583"(CSVで書かれた場合: "+446738193583")

多くの電話番号が先頭の0を保持し、末尾に0を残していないことに言及して忘れました(これは編集です)。おそらく1/20の電話番号が混乱します。

私は非常に奇妙なエラーであると思われ、これが私がここに来た理由です!誰かが何らかのアイデアを持っていれば、私はそれらを聞いて嬉しくなるでしょう。乾杯。

+0

明らかに問題は、数字だけからなるフィールドが文字列ではなく数値として扱われていることです。使用しているCSVモジュールには、各フィールドの形式を指定する方法がいくつかあります。そうでない場合は、おそらくこの仕事のための適切なツールではありません。 – jasonharper

+0

@jasonharperですが、数字の周りに引用符を入れるときは、数字を文字列として渡します。どのCSVモジュールですか?あなたはxlrdについて話していますか? CSVインポートを使用していましたが、スクリプトで正しく機能していませんでした。 –

+0

@jasonharperだから私は数字をとって文字列にして、それを代わりに使用しましたが、これはうまくいかなかったので、私は何かが欠けていない限り、あなたが正しいとは思わない –

答えて

0

問題はExcelドキュメント内で嘘をついたが、私はスクリプト内でそれが嘘だと思った。フォーマットエラーの原因となった各番号の前に 'を付けました。これは、シートから読み取ったときにフォーマットに問題がなく、ファイルに正常に書き戻したことを意味していました。

関連する問題