このようなテキストファイルがいくつかあり、5000行あります。
5.6 4.5 6.8 "6.5" (new line)
5.4 8.3 1.2 "9.3" (new line)
したがって、最後の用語は二重引用符で囲まれた数字です。
私がやりたいのは、Python(可能であれば)を使用して、4つの列をdouble変数に割り当てることです。しかし、主な問題は最後の用語です。二重引用符を削除する方法が見つかりません数字に、それはLinuxで可能ですか?
これは私が試したものです:
#!/usr/bin/python
import os,sys,re,string,array
name=sys.argv[1]
infile = open(name,"r")
cont = 0
while 1:
line = infile.readline()
if not line: break
l = re.split("\s+",string.strip(line)).replace('\"','')
cont = cont +1
a = l[0]
b = l[1]
c = l[2]
d = l[3]
csv
モジュール(標準ライブラリ)はそれを自動的に行いますが、ドキュメントはskipinitialspace
についてあまり詳しくありません
>>> import csv
>>> with open(name, 'rb') as f:
... for row in csv.reader(f, delimiter=' ', skipinitialspace=True):
... print '|'.join(row)
5.6|4.5|6.8|6.5
5.4|8.3|1.2|9.3
for line in open(name, "r"):
line = line.replace('"', '').strip()
a, b, c, d = map(float, line.split())
これは一種の必要最低限であり、(たとえば)行に4つの値がない場合などに例外を発生させます。
shlex
という標準ライブラリから使用できるモジュールがあります:
>>> import shlex
>>> print shlex.split('5.6 4.5 6.8 "6.5"')
['5.6', '4.5', '6.8', '6.5']
for line in open(fname):
line = line.split()
line[-1] = line[-1].strip('"\n')
floats = [float(i) for i in line]
別のオプションは、組み込みモジュールを使用することです。つまり、このタスクにintendedを使用します。すなわち csv
:
>>> import csv
>>> for line in csv.reader(open(fname), delimiter=' '):
print([float(i) for i in line])
[5.6, 4.5, 6.8, 6.5]
[5.6, 4.5, 6.8, 6.5]
または、単にあなたの行を置き換えることができます
l = re.split("\s+",string.strip(line)).replace('\"','')
これとともに:
l = re.split('[\s"]+',string.strip(line))
私は本質的に「を使用して「25」を削除するために使用しました
Code:
result = result.strip("\"") #remove double quotes characters
最も簡単で効率的な方法は、スライスすることだと思います!
あなたのコードから:
d = l[3]
returns "6.5"
別のステートメントを追加するだけです:
d = d[1:-1]
現在は、先頭と末尾の二重引用符なしで6.5を返します。
ビオラ! :)
私見、最も普遍的な二重引用符ストリッパーはこれです:
In [1]: s = '1 " 1 2" 0 a "3 4 5 " 6'
In [2]: [i[0].strip() for i in csv.reader(s, delimiter=' ') if i != ['', '']]
Out[2]: ['1', '1 2', '0', 'a', '3 4 5', '6']
あなたは正規表現を使うことができます、このような何かを試してください
import re
re.findall("[0-9.]+", file(name).read())
これにより、ファイル内のすべての数字のリストが引用符なしの文字列として表示されます。