我對Python很陌生。我知道這已經被問到了,並且我很抱歉,但是這種新情況的不同之處在於字符串之間的空格不相等。我有一個文件,命名爲座標,包含以下空格分隔字符串:將空格分隔的文件轉換爲Python中的逗號分隔值文件
1 C 6.00 0.000000000 1.342650315 0.000000000
2 C 6.00 0.000000000 -1.342650315 0.000000000
3 C 6.00 2.325538562 2.685300630 0.000000000
4 C 6.00 2.325538562 -2.685300630 0.000000000
5 C 6.00 4.651077125 1.342650315 0.000000000
6 C 6.00 4.651077125 -1.342650315 0.000000000
7 C 6.00 -2.325538562 2.685300630 0.000000000
8 C 6.00 -2.325538562 -2.685300630 0.000000000
9 C 6.00 -4.651077125 1.342650315 0.000000000
10 C 6.00 -4.651077125 -1.342650315 0.000000000
11 H 1.00 2.325538562 4.733763602 0.000000000
12 H 1.00 2.325538562 -4.733763602 0.000000000
13 H 1.00 -2.325538562 4.733763602 0.000000000
14 H 1.00 -2.325538562 -4.733763602 0.000000000
15 H 1.00 6.425098097 2.366881801 0.000000000
16 H 1.00 6.425098097 -2.366881801 0.000000000
17 H 1.00 -6.425098097 2.366881801 0.000000000
18 H 1.00 -6.425098097 -2.366881801 0.000000000
請在第一列的每個字符串的開始前的注意事項的空間。所以,我曾試圖將其轉換爲CSV的順序如下:
with open('coord') as infile, open('coordv', 'w') as outfile:
outfile.write(infile.read().replace(" ", ", "))
# Unneeded columns are deleted from the csv
input = open('coordv', 'rb')
output = open('coordcsvout', 'wb')
writer = csv.writer(output)
for row in csv.reader(input):
if row:
writer.writerow(row)
input.close()
output.close()
with open("coordcsvout","rb") as source:
rdr= csv.reader(source)
with open("coordbarray","wb") as result:
wtr= csv.writer(result)
for r in rdr:
wtr.writerow((r[5], r[6], r[7]))
當我運行該腳本,我得到了在腳本的第一個部分,這當然是非常的coordv以下錯誤:
, 1, C, , , 6.00, , 0.000000000, , 1.342650315, , 0.000000000
, 2, C, , , 6.00, , 0.000000000, -1.342650315, , 0.000000000
, 3, C, , , 6.00, , 2.325538562, , 2.685300630, , 0.000000000
, 4, C, , , 6.00, , 2.325538562, -2.685300630, , 0.000000000
, 5, C, , , 6.00, , 4.651077125, , 1.342650315, , 0.000000000
, 6, C, , , 6.00, , 4.651077125, -1.342650315, , 0.000000000
, 7, C, , , 6.00, -2.325538562, , 2.685300630, , 0.000000000
, 8, C, , , 6.00, -2.325538562, -2.685300630, , 0.000000000
, 9, C, , , 6.00, -4.651077125, , 1.342650315, , 0.000000000
, 10, C, , , 6.00, -4.651077125, -1.342650315, , 0.000000000
, 11, H, , , 1.00, , 2.325538562, , 4.733763602, , 0.000000000
, 12, H, , , 1.00, , 2.325538562, -4.733763602, , 0.000000000
, 13, H, , , 1.00, -2.325538562, , 4.733763602, , 0.000000000
, 14, H, , , 1.00, -2.325538562, -4.733763602, , 0.000000000
, 15, H, , , 1.00, , 6.425098097, , 2.366881801, , 0.000000000
, 16, H, , , 1.00, , 6.425098097, -2.366881801, , 0.000000000
, 17, H, , , 1.00, -6.425098097, , 2.366881801, , 0.000000000
, 18, H, , , 1.00, -6.425098097, -2.366881801, , 0.000000000
我曾嘗試在.replace不同的可能性,沒有任何成功,到目前爲止,我還沒有發現的資料,我怎麼能做到這一點的任何來源。從這個coord文件中獲取逗號分隔值的最佳方法是什麼?我感興趣的是使用再csv模塊Python中選擇列4:6,最後使用numpy的導入它們如下:
from numpy import genfromtxt
cocmatrix = genfromtxt('input', delimiter=',')
,我會很高興,如果有人可以幫助我問題。
'的sed -r 's/^ \ s + //; S/\ s + /,/ G' coord' –
如果唯一的目的僅僅是從一種類型轉換爲另一種類型,bash腳本將很容易,對嗎? – Ananta
我知道如何使用sed,awk,bash腳本等。但是,我的目的不僅僅是從一個類型文件轉換爲另一個類型文件。我正在處理來自量子化學程序的輸出文件以執行一些操作,以便基於考慮局部化分子軌道的電荷中心自動計算大量計算。 – muammar