24

次のような 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]
4

9 に答える 9

33
for line in open(name, "r"):
    line = line.replace('"', '').strip()
    a, b, c, d = map(float, line.split())

これは必要最小限の機能であり、(たとえば) 行に 4 つの値がない場合などに例外が発生します。

于 2009-11-10T12:23:54.880 に答える
14

と呼ばれる標準ライブラリから使用できるモジュールがありますshlex

>>> import shlex
>>> print shlex.split('5.6  4.5  6.8  "6.5"')
['5.6', '4.5', '6.8', '6.5']
于 2009-11-10T12:31:50.627 に答える
11

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
于 2012-10-22T14:25:26.377 に答える
9
for line in open(fname):
    line = line.split()
    line[-1] = line[-1].strip('"\n')
    floats = [float(i) for i in line]

別のオプションは、このタスク用の組み込みモジュールを使用することです。すなわち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]
于 2009-11-10T12:24:25.113 に答える
7

または、単に行を置き換えることができます

l = re.split("\s+",string.strip(line)).replace('\"','')

これとともに:

l = re.split('[\s"]+',string.strip(line))
于 2009-11-10T12:28:50.780 に答える
5

私は本質的に「25」の「」を削除するために使用しました

Code:
        result = result.strip("\"") #remove double quotes characters 
于 2016-01-21T23:50:43.523 に答える
1

最も簡単で効率的な方法は、スライスすることだと思います。

あなたのコードから:

d = l[3]
returns "6.5"

したがって、別のステートメントを追加するだけです。

d = d[1:-1]

これで、先頭と末尾の二重引用符なしで 6.5 が返されます。

ビオラ!:)

于 2012-10-16T23:10:36.763 に答える
0

私見、最も普遍的な二重引用符ストリッパーはこれです:

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']
于 2015-06-12T07:45:23.887 に答える
0

正規表現を使用できます。次のようなものを試してください

import re
re.findall("[0-9.]+", file(name).read())

これにより、ファイル内のすべての数値のリストが引用符なしの文字列として表示されます。

于 2009-11-10T12:27:30.587 に答える