从.txt复制到列表时删除特殊字符

时间:2014-07-31 16:25:28

标签: python

我有一个像这样的.txt文件,我想存储到列表中:

  

'飞机13','巴黎','伦敦',
  '飞机471','柏林','马德里',
  ...
  '飞机34','罗马','雅典'

我想连续存储其内容,就像这样

  

List_Planes = ['Plane 13','Paris','London','Plane 471','Berlin','Madrid',...,'Plane 34','Rome','Athens'] < / p>

如果我这样做

with open('file.txt', 'r') as f:
    my_list = [line for line in f]
print my_list  

我获得了

  

[“'飞机13','巴黎','伦敦',\ n”,“'飞机471','柏林','马德里',\ n”,“......,\ n”,“ '飞机34','罗马','雅典'“]

因为输出不是我想要的,我必须删除一些字符(双逗号和输入)。但是,如果我添加行

my_list.remove(',\n')
my_list.remove('"')    

我获取 ValueError:list.remove(x):x不在列表中

我在这里做错了什么?我认为可能是单个上部逗号之间的字符存在问题,但如果我删除第二行,则错误仍然存​​在。

2 个答案:

答案 0 :(得分:1)

看起来你有一个csv文件。

您可以像这样创建数据:

import csv

data=[]
with open(fn, 'r') as fin:
    reader=csv.reader(fin, quotechar="'")
    for row in reader:
        data.extend(row)

然后是数据:

>>> data
['Plane 13', 'Paris', 'London', 'Plane 471', 'Berlin', 'Madrid', 'Plane 34', 'Rome', 'Athens']

如果您希望文件的每一行都是自己的子列表(更常见的情况),您可以这样做:

with open(fn, 'r') as fin:
    reader=csv.reader(fin, quotechar="'")
    data=[row for row in reader]

>>> data
[['Plane 13', 'Paris', 'London'], ['Plane 471', 'Berlin', 'Madrid'], ['Plane 34', 'Rome', 'Athens']]

或者你可以创建一个词典:

data={}
with open (fn, 'r') as fin:
    reader=csv.reader(fin, quotechar="'")
    for row in reader:
        data[row[0]]=row[1:]

>>> data
{'Plane 471': ['Berlin', 'Madrid'], 'Plane 13': ['Paris', 'London'], 'Plane 34': ['Rome', 'Athens']}     

如果你真的想从该列表中的每个字符串中删除\n,你可以这样做:

>>> li=["'Plane 13','Paris','London',\n", "'Plane 471','Berlin','Madrid',\n", "...,\n", "'Plane 34','Rome','Athens'"]
>>> [e.rstrip('\n') for e in li]
["'Plane 13','Paris','London',", "'Plane 471','Berlin','Madrid',", '...,', "'Plane 34','Rome','Athens'"]

答案 1 :(得分:0)

使用CSV builtin。有一个例子here

基本上:

import csv

with open('data.csv', 'rb') as csvfile:
    csvreader = csv.reader(csvfile, delimiter=",", quotechar="'")
    for row in csvreader:
        # Do whatever you want with the row's elements
        print row