Может ли Python удалять двойные кавычки из строки при чтении в текстовом файле? - PullRequest
22 голосов
/ 10 ноября 2009

У меня есть такой текстовый файл с несколькими 5000 строками:

5.6  4.5  6.8  "6.5" (new line)
5.4  8.3  1.2  "9.3" (new line)

поэтому последний член - это число между двойными кавычками.

Что я хочу сделать, так это с помощью Python (если возможно) назначить четыре столбца двойным переменным. Но главная проблема заключается в последнем члене, я не нашел способа убрать двойные кавычки к числу, возможно ли это в 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]

Ответы [ 9 ]

31 голосов
/ 10 ноября 2009
for line in open(name, "r"):
    line = line.replace('"', '').strip()
    a, b, c, d = map(float, line.split())

Это своего рода «голые кости», которые будут вызывать исключения, если (например) в строке нет четырех значений и т. Д.

14 голосов
/ 10 ноября 2009

Из стандартной библиотеки вы можете использовать модуль под названием shlex:

>>> import shlex
>>> print shlex.split('5.6  4.5  6.8  "6.5"')
['5.6', '4.5', '6.8', '6.5']
11 голосов
/ 22 октября 2012

Модуль 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
9 голосов
/ 10 ноября 2009
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]
7 голосов
/ 10 ноября 2009

Или вы можете просто заменить свою линию

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

с этим:

l = re.split('[\s"]+',string.strip(line))
5 голосов
/ 22 января 2016

Я использовал, по сути, для удаления "в" 25, используя

Code:
        result = result.strip("\"") #remove double quotes characters 
1 голос
/ 17 октября 2012

Я думаю, что самый простой и эффективный способ сделать это - нарезать его!

Из вашего кода:

d = l[3]
returns "6.5"

так что вы просто добавляете другое утверждение:

d = d[1:-1]

теперь он вернет 6,5 без начальных и конечных двойных кавычек.

альт! :)

0 голосов
/ 12 июня 2015

ИМХО, самый универсальный стриптизер в двойных кавычках это:

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']
0 голосов
/ 10 ноября 2009

Вы можете использовать регулярные выражения, попробуйте что-то вроде этого

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

Это даст вам список всех чисел в вашем файле в виде строк без кавычек.

...