读取文本文件时,Python可以从字符串中删除双引号吗?

Posted

技术标签:

【中文标题】读取文本文件时,Python可以从字符串中删除双引号吗?【英文标题】:Can Python remove double quotes from a string, when reading in text file? 【发布时间】:2010-12-15 00:29:14 【问题描述】:

我有一些这样的文本文件,有好几行 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]

【问题讨论】:

双引号在单引号内时是否需要转义? 【参考方案1】:
for line in open(name, "r"):
    line = line.replace('"', '').strip()
    a, b, c, d = map(float, line.split())

这是一种准系统,如果(例如)行中没有四个值等情况下会引发异常。

【讨论】:

正如我在回答中所展示的那样,有什么理由比使用内置模块更可取吗? shlex 非常专业。它恰好可以完美地完成这项任务,但对于 OP 来说,首先学习一些更基础、更灵活的工具可能更重要。 虽然有些模块能够删除双引号,但一个简单的 map 函数确实可以完成所需的操作,并且不需要去掉引号,因为 float 函数会处理这种转换 @gr8tech float() 不会删除双引号。 这是我所做的 list(map(float,[1.2,1.3,"5.4"])),也许我遗漏了什么?【参考方案2】:
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]

【讨论】:

它也可以用不同的方式做到这一点:docs.python.org/library/csv.html#csv.QUOTE_ALL【参考方案3】:

你可以用正则表达式,试试这样的

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

这将为您提供文件中所有数字的列表,作为不带任何引号的字符串。

【讨论】:

【参考方案4】:

或者你可以简单地替换你的行

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

用这个:

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

【讨论】:

【参考方案5】:

您可以使用标准库中的一个名为 shlex 的模块:

>>> import shlex
>>> print shlex.split('5.6  4.5  6.8  "6.5"')
['5.6', '4.5', '6.8', '6.5']

【讨论】:

【参考方案6】:

我认为最简单、最有效的做法就是将其切片!

来自您的代码:

d = l[3]
returns "6.5"

所以你只需添加另一个语句:

d = d[1:-1]

现在它将返回 6.5,不带前导和结束双引号。

中提琴! :)

【讨论】:

不,这就是string.replace(), strip() 的用途。但是有更好的方法可以取消引用一行 csv 或空格分隔格式。【参考方案7】:

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

【讨论】:

【参考方案8】:

恕我直言,最通用的双引号剥离器是这样的:

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']

【讨论】:

【参考方案9】:

我本质上是用

去除“25”中的“”
Code:
        result = result.strip("\"") #remove double quotes characters 

【讨论】:

以上是关于读取文本文件时,Python可以从字符串中删除双引号吗?的主要内容,如果未能解决你的问题,请参考以下文章

如何从python中的图像中删除某些文本?

从列表中的对象中删除字节顺序标记

从文本文件中读取列表元组作为元组,而不是字符串 - Python

从文件中读取时一次跳过空格

Python 不读取整个文本文件

python工具箱--文本读取