我有一个由以下行组成的输入文件:
GoogleLoginWrapper
我已将其与['Some Name__________2.0 2.0 1.3\n', 'Some Name__________1.0 9.0 1.0\n', # and so on....]
格式化为:
readlines
我想做的是将名字放在彼此之下,而我正在摆脱_符号。
这是我的代码:
['Some Name', '', '', '', '2.0 2.0 1.3\n']
['Another Name', '', '', '', '1.0 9.0 1.0\n']
['Another Name', '', '', '', '1.0 9.0 1.0\n']
# and so on
所以我现在得到的是:
def openFile():
fileFolder = open('TEXTFILE', 'r')
readMyFile = fileFolder.readlines()
for line in readFile:
line = line.split("_")
personNames = line[0]
print personNames
print openFile()
这很酷,但我想更进一步,这就是我陷入困境的地方。 我现在想要做的是摆脱空字符串{Some Name
Another Name
Another Name
)并打印您可以看到的数字,就在我已经格式化的名称旁边。< / p>
我以为我可以这样做:
""
但这给了我这个错误:
for line in readFile:
line = line.split("_")
get_rid_of_spaces = line.split() #getting rid of spaces too
personNames = line[0]
我该怎么做?我想学习这个。
我也试过递增索引号,但是这个失败了,我读过它并不是最好的方法,所以现在我就这样了。
除此之外,我希望当我做AttributeError: 'list' object has no attribute 'split'
时,它会给我空字符串,但它不会。
我在这里缺少什么?
答案 0 :(得分:4)
只需使用re
split 即可获得多个字符分隔符:
>>> import re
>>>
>>> line = 'Some Name__________2.0 2.0 1.3\n'
>>> re.split(r'_+', line)
['Some Name', '2.0 2.0 1.3\n']
for 循环中的示例:
>>> lines = ['Some Name__________2.0 2.0 1.3\n', 'Some Name__________1.0 9.0 1.0\n']
>>> for dat in [re.split(r'_+|\n', line) for line in lines]:
... person = dat[0]
... id = dat[1]
... print person, id
...
Some Name 2.0 2.0 1.3
Some Name 1.0 9.0 1.
答案 1 :(得分:2)
使用列表推导删除空字符串。
for line in read_file:
tokens = [x for x in line.split("_") if x != ""]
person_name = tokens[0]
答案 2 :(得分:1)
str.split
的输出是list
list
没有split
方法,这就是您收到错误的原因。
您可以改为:
with open('yourfile') as f:
for line in f:
split = line.split('_')
name, number = split[0], split[-1]
print '{}-{}'.format(number, name)
有几点需要注意:
1)不要使用驼峰案
2)使用文件的上下文管理器,即with
语句,如果出现故障,它会很好地处理文件状态
3)注意这一行:for line in f:
。它具有迭代每一行的好处,永远不会将整个文件放在内存中
答案 3 :(得分:1)
你可以这样做:
for line in readFile:
line = line.split("_")
line = filter(bool, line)
这将删除line
列表中的所有空字符串。
答案 4 :(得分:1)
>>> a =['Some Name__________2.0 2.0 1.3\n', 'Some Name__________1.0 9.0 1.0\n']
>>> import re
>>> [re.search(r'_+(.+)$', i.rstrip()).group(1) for i in a]
['2.0 2.0 1.3', '1.0 9.0 1.0']
答案 5 :(得分:0)
readfile=['Some name____2.0 2.1 1.3','Some other name_____2.2 3.4 1.1']
data=[]
for line in readfile:
first_split=list(part for part in line.split('_') if part!='')
data.append(list([first_split [0],first_split [1].split(' ')]))
print(data)
如果我理解正确的话,我认为这就是你想要的。打印出来:
[['Some name', ['2.0', '2.1', '1.3']], ['Some other name', ['2.2', '3.4', '1.1']]]