簡體   English   中英

用於根據條件將數據寫入單獨文件的簡單python代碼?

[英]Simple python code for writing data to separate files based on condition?

我有一個看起來像的數據集

[23, 45, 23, 55, 66, 77]

我正在使用這種方法將數據寫入文件(我知道有更好的方法將這種類型的數據寫入文件,但是出於稍后的特定原因,我正在使用.format方法):

mydata.write(' '.join(["{}".format(a) for a in data]) + '\n')

現在,我有一個與“數據”相同元素數的不同數據集:

[1, 2, 1, 1, 2, 2]

我想以最簡單的代碼在一個文件中寫入所有與“ 1”相對應的數據,並在另一個文件中寫入與“ 2”相對應的所有數據。

如果我對您的理解正確,則可以這樣獲取所需的數據集:

import numpy
data = numpy.array([23, 45, 23, 55, 66, 77])
pattern = numpy.array([1, 2, 1, 1, 2, 2])

set1 = data[pattern == 1]
set2 = data[pattern == 2]

然后,您只需要像以前一樣保存它們即可。

您只需將兩個文件分別創建為1.txt2.txt然后使用zip()方法對兩個列表進行zip()並返回一個新的嵌套列表,並且嵌套列表的每個元素都包含一個元素列表a和另一個from列表b。

然后,我們只需遍歷此新列表並檢查所需條件,然后將數據寫入相關文件。

a  = [23, 45, 23, 55, 66, 77]

b = [1, 2, 1, 1, 2, 2]

with open("1.txt", "w") as one , open("2.txt", "w") as two:
    for data in zip(b, a):
        if data[0] == 1:
            one.write(str(data[1])+"\t")
        else:
            two.write(str(data[1])+"\t")

其他答案也不錯,但是值得一提的是列表理解帶有條件子句:

["{}".format(a) for a,m in zip(data,mask) if m==1]

當然還有一個類似的表達式, m==2


出於好奇,我選擇了一些替代方案:

In [188]: data=np.arange(1000)
In [189]: mask=(data%2)==1

是時候用這種方式格式化整個數組了。 這尊重了OP對.format的選擇:

In [190]: timeit ' '.join(["{}".format(a) for a in data])
1000 loops, best of 3: 1.02 ms per loop

應用布爾掩碼,然后格式化。 應用遮罩的速度很快,因此2倍的速度是將一半的值格式化的結果:

In [191]: timeit ' '.join(["{}".format(a) for a in data[mask]])
1000 loops, best of 3: 527 µs per loop

通過理解應用面具。 不如data[mask] ,但還不錯:

In [192]: timeit ' '.join(["{}".format(a) for a,m in zip(data,mask) if m])
1000 loops, best of 3: 742 µs per loop

奇怪的是,使用“本機”格式速度較慢。 可能與將字符串分成幾行有關:

In [193]: timeit str(data[mask])
100 loops, best of 3: 5.91 ms per loop

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM