3 回答
TA贡献1909条经验 获得超7个赞
这是您可能会处理此问题的一种方法的快速示例。
>>> data = "1 2 3 4 5 6 7 8 9 10"
>>> items = data.split(" ")
>>> chunk_size = 5
>>> chunks = [items[i:i+chunk_size] for i in range(len(items)/chunk_size)]
>>> chunks
[['1', '2', '3', '4', '5'], ['2', '3', '4', '5', '6']]
>>> "\n".join([" ".join(chunk) for chunk in chunks])
'1 2 3 4 5\n2 3 4 5 6'
请注意,这里有一些不安全的假设。例如,我假设您的线条长度一致,您一开始就知道。
如果您的行不是已知的一致长度,并且您想在特定标记上中断,您可以这样做:
>>> data = "1 2 3 4 STOP 5 6 7 8 STOP"
>>> token = "STOP"
>>> chunks = data.split(token)
>>> "\n".join(["{} {}".format(chunk, token) for chunk in chunks])
'1 2 3 4 STOP\n 5 6 7 8 STOP\n STOP'
>>>
显然,一旦您有了数据行,您就可以简单地将它们发送到文件中。
TA贡献1862条经验 获得超6个赞
我在这里的解决方案可能有点过火,但下面的内容将为您提供您想要实现的输出。
这应该为将来提供可重复使用的功能,以防您遇到与此类似的另一个问题,这迫使您找到“NO SYNC”以外的其他内容。
就像@Rahul Chawla 的回答一样,这会查找您的新行标识符NO SYNC并将其更新为NOSYNC!. 这很有用的原因是,它为我们提供了一种创建以 结尾的条目列表的方法,NO SYNC每次我们看到!. 您可以根据数据中不存在的内容自定义将哪些分隔符(delim参数,默认为!)附加到您的find参数。
import csv
raw_data = (
100, 0.01, 11139155, 5569534, 0.499996094856387, 'NO SYNC', 555, 0.01, 2306110, 1153050, 0.499997831846703, 'NO SYNC',
3081, 0.01, 1951735, 975863, 0.499997694359122, 'NO SYNC', 17100, 0.01, 2896740, 1448360, 0.499996547843438, 'NO SYNC',
94912, 0.01, 1800105, 900045, 0.499995833576375, 'NO SYNC', 526805, 0.01, 2290245, 1145113, 0.499995851972169,
'NO SYNC', 2924018, 0.01, 2256745, 1128371, 0.499999335325879, 'NO SYNC', 16229682, 0.01, 2004625, 1002304,
0.49999575980545, 'NO SYNC', 90082412, 0.01, 1912945, 956468, 0.499997647606178, 'NO SYNC', 500000000, 0.01, 1421040,
710518, 0.499998592580082, 'NO SYNC')
def identify_new_rows(data, find, delim='!'):
"""convert a flat tuple/list, or string into a list of lists given something to `find`."""
if isinstance(data, tuple):
data = " ".join(map(str, data))
elif isinstance(data, list):
data = " ".join(data)
data = [[x for x in d.split(' ') if str(x) != ''] for d in data.replace(find, str(find).replace(' ', '') + delim).split(delim) if len(d) > 0]
return data
with open(r'~/path/to/your/file.csv', 'w', newline='') as myfile:
wr = csv.writer(myfile, quoting=csv.QUOTE_ALL, delimiter=',')
wr.writerows(identify_new_rows(raw_data, 'NO SYNC'))
在尝试应用于其他数据集时,我会注意到这种方法存在缺陷,因为这假定您的数据中没有带空格的字符串(当前分隔符除外 - 在列表理解中处理。
添加回答
举报