Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/277.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何在不包含列/行标题的tab delim文件中使用itertools.isslice()_Python_Python 3.x_For Loop_Itertools - Fatal编程技术网

Python 如何在不包含列/行标题的tab delim文件中使用itertools.isslice()

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

我有一个.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 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
进行的选择