迭代文件时如何从文件中读取 n 行而不是仅读取一行?我有一个具有明确结构的文件,我想做这样的事情:
for line1, line2, line3 in file:
do_something(line1)
do_something_different(line2)
do_something_else(line3)
Run Code Online (Sandbox Code Playgroud)
但它不起作用:
ValueError:太多值无法解压
现在我正在这样做:
for line in file:
do_someting(line)
newline = file.readline()
do_something_else(newline)
newline = file.readline()
do_something_different(newline)
... etc.
Run Code Online (Sandbox Code Playgroud)
这很糟糕,因为我正在编写无休止的“ newline = file.readline()”,这使代码变得混乱。有什么聪明的方法可以做到这一点吗?(我真的想避免一次读取整个文件,因为它很大)
我只是使用python从列表中提取了一些数据,但认为它过于复杂和unpythonic,并且可能有更好的方法来做到这一点.我其实很确定我在标准库文档中看到了这个,但我的大脑拒绝告诉我在哪里.
所以这里:
输入:
x = range(8) # any even sequence
Run Code Online (Sandbox Code Playgroud)
输出:
[[0, 1], [2, 3], [4, 5], [6, 7]]
Run Code Online (Sandbox Code Playgroud)
我的看法:
[ [x[i], x[i+1]] for i in range(len(x))[::2] ]
Run Code Online (Sandbox Code Playgroud) 我无法使用搜索功能找到答案,所以我开始这个帖子.
考虑使用可由x划分的列表.例如:
onetonine = [1,2,3,4,5,6,7,8,9]
Run Code Online (Sandbox Code Playgroud)
在这种情况下,示例x将为3.
现在我想创建一个新的列表
len(onetonine)/x
Run Code Online (Sandbox Code Playgroud)
元素,这意味着3个元素.
重要的是,我希望新列表的元素是旧列表的每个x元素的总和.这意味着:
newlist = [6, 15, 24]
Run Code Online (Sandbox Code Playgroud)
因此,基本上采用旧列表中的x = 3个元素并添加它们.重复直到完成.
我无法为此获得有效的解决方案,所以我正在寻求帮助.
谢谢.
请理解,我搜索了这个,它已经有了答案.但是我正在寻找一种不同的方法来获得这个结果.这可能被标记为重复,虽然我认为这可能使用itertools (最有可能groupby)有一个更清晰的答案.
说我有一个清单data.我希望一次有3个值,假设列表是值的数量,以便最后排除不正确的值.
data = [1, 2, 3, 4, 5, 6,...]
Run Code Online (Sandbox Code Playgroud)
这是我想要遍历列表的方式(这段代码显然不起作用):
for a, b, c in data:
#perform operations
pass
Run Code Online (Sandbox Code Playgroud)
现在有了上面的代码,我想a, b, c成为1, 2, 3然后4, 5, 6分别在每个迭代.我确信那里有一个更清洁的方法,而不是我链接的答案.
对于那些不想点击链接以查看我所指的方法的懒人,这里是:
如果要通过成对的连续元素遍历列表,则可以使用切片:
Run Code Online (Sandbox Code Playgroud)>>>myList = [4, 5, 7, 23, 45, 65, 3445, 234] >>>for x,y in (myList[i:i+2] for i in range(0,len(myList),2)): print(x,y) 4 5 7 23 45 65 3445 234
输入上的平面(一维)元组:
data = ('a','b','c'.....'z');
Run Code Online (Sandbox Code Playgroud)
输出:具有n(比如9)列的表(两个维度)
table = ?what code here?
Run Code Online (Sandbox Code Playgroud)
所以
print table
( ('a','b','c'...), ('k','l','m','n'...), ....)
Run Code Online (Sandbox Code Playgroud)
这是最短的方法吗?
这个问题实际上是用于DNA密码子分析,用简单的方式来说,假设我有一个这样的文件:
atgaaaccaaag ...
而且我想计算这个文件中存在的'aaa'三元组的数量.重要的是,三元组从一开始就开始(这意味着atg,aaa,cca,aag,......)因此在这个例子中结果应该是1而不是2'aaa'.
有没有Python或Shellscript方法来做到这一点?谢谢!
我有一个包含107个名字的列表,我想以3个左右的组形式打印出来,每个名称用一个标签分隔,每行后面有一个换行符,直到结束.我怎样才能做到这一点?
与for item in list print item我只能得到每场的行1名,这是很好的我想,但我想更适合在控制台一次,所以我想在每行打印3名左右的名字,因为我去通过列表,而不是:
name1
name2
name3
name4
name5
name6
Run Code Online (Sandbox Code Playgroud)
我会得到:
name1 name2 name3
name4 name5 name6
Run Code Online (Sandbox Code Playgroud)
有点难以找到答案,我无法想出我需要的东西,或者我能理解的东西,我发现的大多数事情只是处理len()或range()混淆了我.有一些简单的方法可以做到这一点吗?谢谢!
[edit:update]使用@ inspectorG4dget的示例:
for i in range(0, len(listnames), 5):
print '\t\t'.join(listnames[i:i+5])
Run Code Online (Sandbox Code Playgroud)
我得到以下内容:http://www.pasteall.org/pic/show.php?id = 41159
我怎样才能清理干净,以便每列中的所有内容都很好地对齐?我想要的容易吗?
我想使用PyMongo的批量 写入操作功能,这些功能可以批量执行写操作,以减少网络往返次数并提高计算吞吐量.
我在这里也发现可以使用5000作为批号.
但是,我不希望批号的最佳大小以及如何在下面的代码中将PyMongo的批量写入操作功能与生成器结合起来?
from pymongo import MongoClient
from itertools import groupby
import csv
def iter_something(rows):
key_names = ['type', 'name', 'sub_name', 'pos', 's_type', 'x_type']
chr_key_names = ['letter', 'no']
for keys, group in groupby(rows, lambda row: row[:6]):
result = dict(zip(key_names, keys))
result['chr'] = [dict(zip(chr_key_names, row[6:])) for row in group]
yield result
def main():
converters = [str, str, str, int, int, int, str, int]
with open("/home/mic/tmp/test.txt") as c:
reader = csv.reader(c, skipinitialspace=True)
converted = ([conv(col) for conv, …Run Code Online (Sandbox Code Playgroud) 所以我有一个问题,我有一个iterable(字符串或列表在这里)喜欢string = "ABCDEFG",我想输出类似的东西
A-B
B-C
C-D
...
F-G
Run Code Online (Sandbox Code Playgroud)
所以我知道这有效(忘了处理indexError,但无论如何),但它很难看......
for i in range(len(myString)):
element1 = myString[i]
element2 = myString[i+1]
print("theshit")
Run Code Online (Sandbox Code Playgroud)
有没有办法以更优雅/ pythonic的方式做到这一点?我认为itertools可以是一个解决方案,但我不知道它是如何工作的..
顺便说一句,我myString只需要这个循环所以也许生成器(不知道如何使用它,我还在学习)
谢谢 :)
我有 1 列 df,有 37365 行。我需要将其分成如下所示的块:
df[0:2499]
df[2500:4999]
df[5000:7499]
...
df[32500:34999]
df[35000:37364]
Run Code Online (Sandbox Code Playgroud)
这个想法是在如下循环中使用它(process_operation 不适用于大于 2500 行的 dfs)
while chunk <len(df):
process_operation(df[lower:upper])
Run Code Online (Sandbox Code Playgroud)
编辑:我将有不同的数据帧作为输入。其中一些小于 2500。捕获这些的最佳方法是什么?
Ej: df[0:1234] because 1234<2500
Run Code Online (Sandbox Code Playgroud) python ×10
list ×3
bulkinsert ×1
file ×1
iteration ×1
mongodb ×1
pandas ×1
printing ×1
pymongo ×1
python-2.7 ×1
python-3.x ×1
shell ×1
sum ×1
tabs ×1