簡體   English   中英

循環使用Python中的列,並將輸出寫入文件中的每一列

[英]Looping over columns in Python and writing the output for each column in a file

我的數據集中有7列。 我腳本的一部分是處理各列並對其進行處理。 例如,以下內容正在第二列上工作

for line in f:
    input_list.append(float(line.split()[1]))

我希望它處理所有7列並將每個輸出寫為'file $ columnno.dat'

問題1 :這是正確的方法嗎?

mylist = [1, 2, 3, 4 , 5, 6, 7]
for n in my list:
    for line in f:
        input_list.append(float(line.split()[n]))

問題2 :現在輸出只是數字列表。

print(*closed, sep='\n')

但是我希望將每一列的輸出作為文件,例如file1.dat (1 is the same syntax of the column no.), file2.dat等。這是%f命令。 我沒有解決它。 這似乎很標准,很抱歉,如果我用現有的問題覆蓋這個問題。

看起來您需要list.extend

例如:

for line in f:
    input_list.extend( map(float, line.split()) )
  • 使用map將列表中的每個元素轉換為float

問題1

您的解決方案將無法正常工作,因為您無法在同一行上重復兩次,除非您使用seek(0) (請參閱docs: 文件對象的方法 )從第一行重新開始。 相反,您可以迭代每一行並創建一個列表列表,每個子列表代表文件中的一行。

csv模塊使語法更容易,因此您無需手動進行迭代,拆分字符串或轉換為float 這些可以由csv.reader以有效的方式處理:

from io import StringIO
import csv

mystr = StringIO("""34.12 42.13 4.1 65.13 -42.314 54.1 45.32
0.35 65.13 76.13 17.1 -45.1 65.1 78.1""")

# replace mystr with open('file.txt', 'r')
with mystr as fin:
    reader = csv.reader(fin, delimiter=' ', quoting=csv.QUOTE_NONNUMERIC)
    L = list(reader)

print(L)

[[34.12, 42.13, 4.1, 65.13, -42.314, 54.1, 45.32],
 [0.35, 65.13, 76.13, 17.1, -45.1, 65.1, 78.1]]

問題2

您可以通過zip遍歷列表列表的每個索引。 然后,在循環中,遍歷列中的值。 輸出將是7個文件,每個文件都有來自原始輸入文件的一列。 這是一個例子:

for idx, column in enumerate(zip(*L), 1):
    with open(r'c:\temp\out_{0}.csv'.format(idx), 'w', newline='') as myfile:
        writer = csv.writer(myfile)
        for val in column:
            writer.writerow([val])

暫無
暫無

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

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