Python 如何在不包含列/行标题的tab delim文件中使用itertools.isslice()
我有一个.txt文件,它包含1000行500列,其中包含从0到2的整数。例如,前三行可能看起来像:Python 如何在不包含列/行标题的tab delim文件中使用itertools.isslice(),python,python-3.x,for-loop,itertools,Python,Python 3.x,For Loop,Itertools,我有一个.txt文件,它包含1000行500列,其中包含从0到2的整数。例如,前三行可能看起来像: 0 0 0 0 2 2 2 2 2 1 1 1 0 2 1 2 ... 0 2 2 2 0 0 0 0 1 0 0 0 1 0 2 0 ... 0 2 2 2 2 2 2 2 0 1 1 1 1 1 1 1 ... 我将比较给定行中的每一列值,并对它们进行处理 但是,在迭代过程中,我需要区分前500行和最后500行 如果我输入以下代码: for row in file: for col1
0 0 0 0 2 2 2 2 2 1 1 1 0 2 1 2 ...
0 2 2 2 0 0 0 0 1 0 0 0 1 0 2 0 ...
0 2 2 2 2 2 2 2 0 1 1 1 1 1 1 1 ...
我将比较给定行中的每一列值,并对它们进行处理
但是,在迭代过程中,我需要区分前500行和最后500行
如果我输入以下代码:
for row in file:
for col1 in row:
for col2 in row:
for循环将包括所有行。我的目标是有两个这样的for循环,一个用于前500行,另一个用于最后500行。行之间用新行分隔,这是我正在使用csv.reader读取的.txt文件
在一些示例中,我发现itertools.isslice()可能可以解决这个问题,但在我在文档中看到的所有示例中,要么只有一行,要么每行的第一列都有可以用来区分行本身的特性
我是否认为我可以使用itertools.isslice()来分隔行,或者这在这里不起作用
提前感谢您的帮助。您似乎希望拆分文件 选项1:是的,您可以使用
itertools.islice
来实现这一点。行本身可以用csv
模块分隔
给定的
示例选项卡分隔文件test.txt
:
# test.txt
a 0 0 0 0 2 2 2 2 2
b 0 2 2 2 0 0 0 0 1
c 0 2 2 2 0 0 0 0 1
d 0 0 0 0 2 2 2 2 2
e 0 2 2 2 0 0 0 0 1
f 0 2 2 2 0 0 0 0 1
g 0 0 0 0 2 2 2 2 2
h 0 2 2 2 0 0 0 0 1
i 0 2 2 2 0 0 0 0 1
代码
我们实现了一个可以读取文件并干净地生成其行的:
>>> def read_file(filepath):
... with open(filepath, "r") as f:
... reader = csv.reader(f, delimiter="\t")
... for row in reader:
... yield row
演示
>>> import pandas as pd
>>> df = pd.read_csv(fpath, delimiter="\t", header=None)
>>> top = df.iloc[:5, :]
>>> bot = df.iloc[5:, :]
>>> top
0 1 2 3 4 5 6 7 8 9
0 a 0 0 0 0 2 2 2 2 2
1 b 0 2 2 2 0 0 0 0 1
2 c 0 2 2 2 0 0 0 0 1
3 d 0 0 0 0 2 2 2 2 2
4 e 0 2 2 2 0 0 0 0 1
>>> bot
0 1 2 3 4 5 6 7 8 9
5 f 0 2 2 2 0 0 0 0 1
6 g 0 0 0 0 2 2 2 2 2
7 h 0 2 2 2 0 0 0 0 1
8 i 0 2 2 2 0 0 0 0 1
现在我们读取文件并切片一些行,例如5
。其余的行
包含文件的其余部分:
>>> lines = read_file(fpath)
>>> top = list(it.islice(lines, 5))
>>> bot = list(lines)
>>> top
[['a', '0', '0', '0', '0', '2', '2', '2', '2', '2'],
['b', '0', '2', '2', '2', '0', '0', '0', '0', '1'],
['c', '0', '2', '2', '2', '0', '0', '0', '0', '1'],
['d', '0', '0', '0', '0', '2', '2', '2', '2', '2'],
['e', '0', '2', '2', '2', '0', '0', '0', '0', '1']]
>>> bot
[['f', '0', '2', '2', '2', '0', '0', '0', '0', '1'],
['g', '0', '0', '0', '0', '2', '2', '2', '2', '2'],
['h', '0', '2', '2', '2', '0', '0', '0', '0', '1'],
['i', '0', '2', '2', '2', '0', '0', '0', '0', '1']]
另请参阅有关使用解析的详细信息
选项2:另一方面,考虑第三方库。 演示
>>> import pandas as pd
>>> df = pd.read_csv(fpath, delimiter="\t", header=None)
>>> top = df.iloc[:5, :]
>>> bot = df.iloc[5:, :]
>>> top
0 1 2 3 4 5 6 7 8 9
0 a 0 0 0 0 2 2 2 2 2
1 b 0 2 2 2 0 0 0 0 1
2 c 0 2 2 2 0 0 0 0 1
3 d 0 0 0 0 2 2 2 2 2
4 e 0 2 2 2 0 0 0 0 1
>>> bot
0 1 2 3 4 5 6 7 8 9
5 f 0 2 2 2 0 0 0 0 1
6 g 0 0 0 0 2 2 2 2 2
7 h 0 2 2 2 0 0 0 0 1
8 i 0 2 2 2 0 0 0 0 1
另请参见使用pandas
进行的选择