2012-03-23 91 views
37

所以我想要做的事实际上是从.txt文件中吸取一行txt,然后将这些字符分配给一个列表,然后创建一个列表中的所有单独字符名单。将字符串分解成Python中的字符列表

所以列表的列表。

目前,我已经试过:

fO = open(filename, 'rU') 
fL = fO.readlines() 

,这一切即时可达。我不知道如何提取单个字符并将它们分配给新列表。

我想要做的事,如:

fL = 'FHFF HHXH XXXX HFHX' 

^^^让我被从.txt文件得到了线。

然后把它变成这样:

['F', 'H', 'F', 'F', 'H' ...] 

^^^并作为新的列表,用它自己的每一个字符。

回答

18

字符串是可迭代的(就像列表一样)。

我解释,你真正想要的东西,如:

fd = open(filename,'rU') 
chars = [] 
for line in fd: 
    for c in line: 
     chars.append(c) 

fd = open(filename, 'rU') 
chars = [] 
for line in fd: 
    chars.extend(line) 

chars = [] 
with open(filename, 'rU') as fd: 
    map(chars.extend, fd) 

字符将包含文件中的所有字符。

+1

@FlexedCookie ['itertools.chain'](http://docs.python.org/library/itertools.html#itertools.chain)对于这个是最简单的 - “chars = list(itertools.chain.from_iterable(打开(文件名,'rU)))'。 – agf 2012-03-23 03:00:19

+0

上面的代码没有考虑到空格,也就是'''' – Sebastian 2013-07-25 04:34:07

72

可以使用list做到这一点:

fNewList=list(fL); 

注意,在该行的任何空间将被列入这个名单,据我所知。

+0

使用UTF-8字符按预期的方式不起作用。对于字符串“zyć”,我期待3个字符的列表,而我得到这个列表:['z','y','\ xc4','\ x87']。 请问您可以指导一下解决这个问题的方法。谢谢 – 2015-06-11 07:55:59

+0

我已经得到了我的答案,我忘了在我的字符串之前加上'u',所以它没有被当作unicode对待。谢谢。 – 2015-06-11 08:04:20

+0

这实际上是正确答案。 – user1767754 2018-01-23 18:25:27

7
fO = open(filename, 'rU') 
lst = list(fO.read()) 
3

在python中,很多东西都是可迭代的,包括文件和字符串。 在文件处理程序上迭代会为您提供该文件中所有行的列表。 对字符串进行迭代会为您提供该字符串中所有字符的列表。

charsFromFile = [] 
filePath = r'path\to\your\file.txt' #the r before the string lets us use backslashes 

for line in open(filePath): 
    for char in line: 
     charsFromFile.append(char) 
     #apply code on each character here 

,或者如果你想要一个衬垫

#the [0] at the end is the line you want to grab. 
#the [0] can be removed to grab all lines 
[list(a) for a in list(open('test.py'))][0] 

编辑:作为AGF提到可以使用itertools.chain.from_iterable

他的方法比较好,除非你想指定要抓住哪些行 list(itertools.chain.from_iterable(open(filename, 'rU)))

但这却需要一个熟悉itertools的能力,并因此失去一些可读性

如果您只想遍历字符,并且不关心存储列表,那么我会使用嵌套for循环。这种方法也是最可读的。

4

或者使用花哨的列表理解,这应该是“计算上更高效”,有非常非常大的文件/列表

fd = open(filename,'r') 
chars = [c for line in fd for c in line if c is not " "] 
fd.close() 

顺便说一下工作时:这是公认的答案并不占空格...

7

所以字符串hello添加到列表中的单个字符,试试这个:

newlist = [] 
newlist[:0] = 'hello' 
print (newlist) 

    ['h','e','l','l','o'] 

但是,它更容易做到这一点:

splitlist = list(newlist) 
print (splitlist) 
+0

不错的一个,谢谢:-) – tim 2014-06-16 09:48:15

+1

但更简单的是:'newlist = list('hello')' – tim 2014-06-16 09:48:55

+1

@tim是的,刚注意到我没有不要把它放在:) – Tim 2014-06-16 14:33:24

2
a='hello world' 
map(lambda x:x, a) 

[ 'H', 'E', 'L', 'L', '0', '', 'W', '0', 'R' ,'l','d']

一个简单的方法是使用函数“map()”。

20

我有点迟到这似乎是,但......

a='hello' 
print list(a) 
# ['h','e','l','l', 'o'] 
相关问题