Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.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在文本文件中查找表中列的和_Python_Python 3.x - Fatal编程技术网

Python在文本文件中查找表中列的和

Python在文本文件中查找表中列的和,python,python-3.x,Python,Python 3.x,这就是文件的外观 5.0000E+02 5.23744E-06 0.0006 1.0600E+03 2.15119E-06 0.0023 1.6900E+03 1.83529E-06 0.0035 2.4000E+03 1.76455E-06 0.0044 3.1900E+03 1.78831E-06 0.0050 4.0800E+03 1.86632E-06 0.0056 5.0800E+03 1.91086E-06 0.0061 6.1900E+03

这就是文件的外观

5.0000E+02   5.23744E-06  0.0006
1.0600E+03   2.15119E-06  0.0023
1.6900E+03   1.83529E-06  0.0035
2.4000E+03   1.76455E-06  0.0044
3.1900E+03   1.78831E-06  0.0050
4.0800E+03   1.86632E-06  0.0056
5.0800E+03   1.91086E-06  0.0061
6.1900E+03   1.97899E-06  0.0066   <--- Get data from here...
7.4300E+03   2.03105E-06  0.0070
8.8400E+03   2.08666E-06  0.0074
1.0400E+04   2.12723E-06  0.0078
1.2200E+04   2.20352E-06  0.0081
1.4100E+04   2.02335E-06  0.0089
1.6400E+04   1.98286E-06  0.0094
1.8900E+04   1.58478E-06  0.0107
2.1700E+04   1.09529E-06  0.0133
2.4900E+04   6.59218E-07  0.0173
2.8500E+04   3.19703E-07  0.0250
3.2500E+04   1.55052E-07  0.0358
3.7000E+04   6.94320E-08  0.0542
4.2100E+04   3.44175E-08  0.0764
4.7800E+04   2.37904E-08  0.0944
5.4200E+04   1.29016E-08  0.1283
6.1400E+04   5.45355E-09  0.1770
6.9500E+04   4.18030E-09  0.2486
7.8700E+04   2.47747E-09  0.2629
8.8900E+04   2.69887E-09  0.2820
1.0100E+05   2.15937E-09  0.4286
1.1300E+05   4.39994E-10  0.7824
1.2800E+05   0.00000E+00  0.0000
1.4400E+05   0.00000E+00  0.0000
1.6300E+05   0.00000E+00  0.0000
1.8300E+05   0.00000E+00  0.0000
2.0700E+05   0.00000E+00  0.0000
2.3300E+05   0.00000E+00  0.0000
2.6300E+05   0.00000E+00  0.0000
2.9600E+05   0.00000E+00  0.0000   <--- ...to here 
3.3300E+05   0.00000E+00  0.0000
3.7600E+05   0.00000E+00  0.0000
4.2300E+05   0.00000E+00  0.0000
4.7600E+05   0.00000E+00  0.0000
5.3600E+05   0.00000E+00  0.0000
6.0400E+05   0.00000E+00  0.0000
6.8000E+05   0.00000E+00  0.0000
7.6500E+05   0.00000E+00  0.0000
8.6100E+05   0.00000E+00  0.0000
9.6900E+05   0.00000E+00  0.0000
1.0900E+06   0.00000E+00  0.0000
1.2200E+06   0.00000E+00  0.0000
1.3800E+06   0.00000E+00  0.0000
1.5500E+06   0.00000E+00  0.0000
1.7500E+06   0.00000E+00  0.0000
1.9700E+06   0.00000E+00  0.0000
2.2100E+06   0.00000E+00  0.0000
2.5000E+06   0.00000E+00  0.0000
2.8000E+06   0.00000E+00  0.0000
3.1500E+06   0.00000E+00  0.0000
3.5400E+06   0.00000E+00  0.0000
3.9900E+06   0.00000E+00  0.0000
4.4900E+06   0.00000E+00  0.0000
5.0500E+06   0.00000E+00  0.0000
5.6800E+06   0.00000E+00  0.0000
6.3900E+06   0.00000E+00  0.0000
1.0000E+07   0.00000E+00  0.0000
然后我需要中心柱的和

像这样: (1.97899E-06+2.03105E-06+2.08666E-06+…+0.00000E+00)=1.90994E-05

对于这个问题,只有第二列很重要

第一列表示时间。 第二列表示一些数据编号。 第三列表示一些随机数


请帮我找出:((

首先您需要打开文件。最好的方法是:

with open("myfile.txt","r") as f:
    # do stuff with file f here
然后你需要得到单独的行。如果文件不是太大(比如非常大),你可以把它全部存储在内存中

通过调用
list(f)
,例如
list\u of\u file=list(f)
,以列表的形式获取行

然后使用
lines\u i\u want=list\u of_file[a:b]
获取从a行到b行的行

然后使用
center\u column=[float(line.split()[1])为行中的行获取中心列(作为浮动)

现在用
total=sum(中间列)
将它们相加

或者,为了简洁起见,以阅读困难为代价:

with open("myfile.txt") as f:
    print(sum(float(i.split()[1]) for i in list(f)[a:b]))
如果文件较大且无法存储在内存中,则应使用itertools模块中的islice,而不是仅对列表进行切片:

打开时(“myfile.txt”) 打印(islice(f,a,b)中的行的总和(float(line.split()[1]))


如果要执行此操作,请确保在程序顶部包含itertools import islice的
行。

首先需要打开文件。最好的方法是:

with open("myfile.txt","r") as f:
    # do stuff with file f here
然后你需要得到单独的行。如果文件不是太大(比如非常大),你可以把它全部存储在内存中

通过调用
list(f)
,例如
list\u of\u file=list(f)
,以列表的形式获取行

然后使用
lines\u i\u want=list\u of_file[a:b]
获取从a行到b行的行

然后使用
center\u column=[float(line.split()[1])为行中的行获取中心列(作为浮动)

现在用
total=sum(中间列)
将它们相加

或者,为了简洁起见,以阅读困难为代价:

with open("myfile.txt") as f:
    print(sum(float(i.split()[1]) for i in list(f)[a:b]))
如果文件较大且无法存储在内存中,则应使用itertools模块中的islice,而不是仅对列表进行切片:

打开时(“myfile.txt”) 打印(islice(f,a,b)中的行的总和(float(line.split()[1]))


如果要执行此操作,请确保在程序顶部包含itertools import islice的
行。

首先打开文件并创建列表

with open('filename.txt','rU') as f:
    table = f.readlines()
假设您总是标记所需的行,则可以通过

bounds = [table.index(row) for row in table if len(row.split()) is not 3]
这将查看表中的每一行,并找到要开始和停止的位置。要获取要汇总的行,请执行以下操作:

target_rows = table[bounds[0]:bounds[1]+1]
边界[1]上有+1,因为您希望包含最后一个条目,而python中列表拼接的工作方式不包含最后一个条目。要提取第二列,请执行以下操作:

target_col = [float(row.split()[1]) for row in target_rows]
最后要求和:

total = sum(target_col)
此外,目标_行提供您想要输出的行。您可以输出它以提供所需的输出表:

output = ['    '.join(row.split()[:3]) for row in target_rows]

首先打开文件并创建一个列表

with open('filename.txt','rU') as f:
    table = f.readlines()
假设您总是标记所需的行,则可以通过

bounds = [table.index(row) for row in table if len(row.split()) is not 3]
这将查看表中的每一行,并找到要开始和停止的位置。要获取要汇总的行,请执行以下操作:

target_rows = table[bounds[0]:bounds[1]+1]
边界[1]上有+1,因为您希望包含最后一个条目,而python中列表拼接的工作方式不包含最后一个条目。要提取第二列,请执行以下操作:

target_col = [float(row.split()[1]) for row in target_rows]
最后要求和:

total = sum(target_col)
此外,目标_行提供您想要输出的行。您可以输出它以提供所需的输出表:

output = ['    '.join(row.split()[:3]) for row in target_rows]
有可能我将索引进行了转置,在这种情况下,它将是data[1,7:][.sum()

有可能我将索引进行了转置,在这种情况下,它将是data[1,7:][.sum()

根据字段分隔符更改拆分。

根据字段分隔符更改拆分。

你的两个“这里”怎么样定义了什么?首先,我不理解用于确定哪些行相关的标准。其次,你尝试过什么?阅读文本文件、跳过行、转换为浮点和求和都是你可以在谷歌上搜索的基本概念。除非你提供代码,否则我们无法找出你的不足之处。你的两个“在这里”怎么样定义了什么?首先,我不理解用于确定哪些行相关的标准。其次,您尝试过什么?读取文本文件、跳过行、转换为浮点和求和都是可以通过谷歌搜索的基本概念。除非您提供代码,否则我们无法找出您的不足之处。
print(sum(float)(I.split()[1] )对于i,在islice(f,a,b))
避免使用
itertools将整个文件拖到内存中。islice
。为了增加可读性,我将
i
重命名为
row
line
,甚至仅仅是
s
,因为
i
通常用于表示整数。谢谢,我将
print(sum(float(i.split()[1]),用于岛(f,a,b)中的i)
通过使用
itertools.islice
避免将整个文件拖到内存中。为了提高可读性,我将
i
重命名为
row
line
,甚至只是
s
,因为
i
通常用于表示整数。谢谢,我将添加它,因为它只是我感兴趣的第二列您可以执行类似于
data=numpy.loadtxt('filename.txt',usecols=1)
的操作,也可以使用
numpy.sum
进行加速。快速问题)如何得到7和1?请向我解释这些数字是如何产生的?假设您从最上面的数据集开始,您希望选择中间的列,并跳过前几行。这些列将位于第二个索引0,1,2中,1为中间。这些行将位于第一个索引中,7:从索引7中选取所有内容,因此它将