猿问

在多行中将一个元组写入 CSV

所以,我有一个 python 元组。我正在尝试将其写入 CSV 文件。到目前为止我所做的我能够写入 CSV,但我的所有数据都出现在一行中。谁能告诉我如何将其转换为列?例如,这是我的 CSV 上一行中的数据。


100 0.01 11139155 5569534 0.499996 NO SYNC 555 0.01 2306110 1153050 0.499998 NO SYNC 333 0.22 3434535 4446466 0.453535 NO SYNC

我想要做什么我想以一种方式组织这个元组,在每个 NO SYNC 之后它移动到下一行。


100 0.01 11139155 5569534 0.499996 NO SYNC

555 0.01 2306110 1153050 0.499998 NO SYNC

333 0.22 3434535 4446466 0.453535 NO SYNC

这是我的脚本


with open ('File path') as f:

     writer = csv.writer(f, delimiter = ',')

     writer.writerow(results_t1)

f.close()

其中 results_t1 是我的输入元组。


我的输入元组如下所示:


(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')


慕桂英4014372
浏览 210回答 3
3回答

jeck猫

这是您可能会处理此问题的一种方法的快速示例。>>> 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'>>> 显然,一旦您有了数据行,您就可以简单地将它们发送到文件中。

阿波罗的战车

我在这里的解决方案可能有点过火,但下面的内容将为您提供您想要实现的输出。这应该为将来提供可重复使用的功能,以防您遇到与此类似的另一个问题,这迫使您找到“NO SYNC”以外的其他内容。就像@Rahul Chawla 的回答一样,这会查找您的新行标识符NO SYNC并将其更新为NOSYNC!. 这很有用的原因是,它为我们提供了一种创建以 结尾的条目列表的方法,NO SYNC每次我们看到!. 您可以根据数据中不存在的内容自定义将哪些分隔符(delim参数,默认为!)附加到您的find参数。import csvraw_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 datawith 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'))在尝试应用于其他数据集时,我会注意到这种方法存在缺陷,因为这假定您的数据中没有带空格的字符串(当前分隔符除外 - 在列表理解中处理。
随时随地看视频慕课网APP

相关分类

Python
我要回答