Python能否在读取文本文件时去除字符串中的双引号?

24 投票
9 回答
88863 浏览
提问于 2025-04-15 15:51

我有一个文本文件,里面有大约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 个回答

14

你可以使用一个叫做 shlex 的模块,它是Python标准库的一部分:

>>> import shlex
>>> print shlex.split('5.6  4.5  6.8  "6.5"')
['5.6', '4.5', '6.8', '6.5']
33
for line in open(name, "r"):
    line = line.replace('"', '').strip()
    a, b, c, d = map(float, line.split())

这个代码有点简单粗暴,如果比如说一行里没有四个值的话,它就会报错。

11

这个 csv 模块是 Python 自带的工具,可以自动处理一些事情。虽然它的说明文档对 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

撰写回答