2012-03-23 88 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'] 
相關問題