假设我有一个格式如下的文本文件:
100 20只鸟在飞行
我想将int(s)读入自己的列表,将字符串读入自己的列表......我将如何在python中进行此操作。我试过了
data.append(map(int, line.split()))
没有用......有什么帮助吗?
答案 0 :(得分:4)
基本上,我正在逐行读取文件,并将它们分开。我首先检查一下我是否可以把它们变成一个整数,如果我失败了,就把它们视为字符串。
def separate(filename):
all_integers = []
all_strings = []
with open(filename) as myfile:
for line in myfile:
for item in line.split(' '):
try:
# Try converting the item to an integer
value = int(item, 10)
all_integers.append(value)
except ValueError:
# if it fails, it's a string.
all_strings.append(item)
return all_integers, all_strings
然后,给定文件('mytext.txt')
100 20 the birds are flying
200 3 banana
hello 4
...在命令行上执行以下操作返回...
>>> myints, mystrings = separate(r'myfile.txt')
>>> print myints
[100, 20, 200, 3, 4]
>>> print mystrings
['the', 'birds', 'are', 'flying', 'banana', 'hello']
答案 1 :(得分:3)
如果我理解你的问题:
import re
def splitList(list):
ints = []
words = []
for item in list:
if re.match('^\d+$', item):
ints.append(int(item))
else:
words.append(item)
return ints, words
intList, wordList = splitList(line.split())
将为您提供两个列表:[100, 20]
和['the', 'birds', 'are', 'flying']
答案 2 :(得分:2)
这是一个简单的解决方案。请注意,对于非常大的文件,它可能不如其他文件有效,因为它为word
每次迭代line
两次。
words = line.split()
intList = [int(x) for x in words if x.isdigit()]
strList = [x for x in words if not x.isdigit()]
答案 3 :(得分:0)
pop
从列表中删除元素并将其返回:
words = line.split()
first = int(words.pop(0))
second = int(words.pop(0))
这当然是假设您的格式始终为int int word word word ...
。
然后加入其余的字符串:
words = ' '.join(words)
在Python 3中,你甚至可以这样做:
first, second, *words = line.split()
哪个很整洁。虽然您仍需将first
和second
转换为int
。