例如,我想要这个行--法线数
H 113
3 13 21 E 114
24E 215 27 35。-5 7
9 10 18 29 32 - 3
您可以看到,我在示例中用粗体显示了“随机数”,以便按每列打印一个新行: 1、17、19、24、28、10-7从每一行中随机选择一列,然后打印所有列。
现在我有了4800+行,我首先尝试使它们看起来像
{"1" "4" "5" "24" "31" "32", - ,"1",}
{"9" "16" "17" "21" "26" "29", - ,"2",}
{"17" "19" "21" "23" "25" "34", - ,"2",}
{"3" "13" "21" "24" "27" "35", - ,"5",}
{"1" "14" "15" "17" "28" "37", - ,"7",}
{"8" "9" "10" "18" "29" "32", - ,"3",}
而不是那个
1 4 5 24 31 32 - 1
9 16 17 21 26 29 - 2
17 19 21 23 25 34 - 2
3 13 21 24 27 35. - 5
1 14 15 17 28 37 - 7
8 9 10 18 29 32 - 3
如何从每一行中选择一列并将其组合到新行,或者将第一张图表的缩进更改为类似于JSON的。
发布于 2022-05-24 18:52:07
如果您有它在文件中,那么它将更简单,如果你要保持原始缩进。您可以使用模块csv
读取它--使用space
作为分隔符。
我只使用io
来模拟内存中的文件,所以每个人都可以简单地复制和运行它,但是您应该使用open()
。
text = '''1 4 5 24 31 32 - 1
9 16 17 21 26 29 - 2
17 19 21 23 25 34 - 2
3 13 21 24 27 35 - 5
1 14 15 17 28 37 - 7
8 9 10 18 29 32 - 3'''
import io
import csv
#with open('data.txt') as fh:
with io.StringIO(text) as fh:
csv_reader = csv.reader(fh, delimiter=' ')
data = list(csv_reader)
现在您可以获取行数,并使用random
来选择行并从行中获取值。如果您将对不同的列重复它,那么您将得到预期的值。
import random
nrows = len(data) # number of rows
ncols = len(data[0]) # number of cols
values = []
for col in range(ncols):
selected_row = random.randrange(0, nrows)
selected_val = data[selected_row][col]
print(col, selected_row, '->', selected_val)
values.append(selected_val)
print(values)
结果:
['1', '9', '15', '24', '26', '32', '-', '2']
它甚至可以获得-
,这样编写它的文件就更容易了。
with open('data.txt', 'a') as fh:
csv_writer = csv.writer(fh, delimiter=' ')
csv_writer.writerow(values)
由于某些值在不同的列中重复,所以还可以使用while
-loop跳过重复的值。
for col in range(ncols):
while True:
selected_row = random.randrange(0, nrows)
selected_val = data[selected_row][col]
if selected_val not in values:
break
print('skip:', selected_val)
print(col, selected_row, '->', selected_val)
values.append(selected_val)
完整代码:
text = '''1 4 5 24 31 32 - 1
9 16 17 21 26 29 - 2
17 19 21 23 25 34 - 2
3 13 21 24 27 35 - 5
1 14 15 17 28 37 - 7
8 9 10 18 29 32 - 3'''
import io
import csv
import random
#with open('data.txt') as fh:
with io.StringIO(text) as fh:
csv_reader = csv.reader(fh, delimiter=' ')
data = list(csv_reader)
nrows = len(data)
ncols = len(data[0])
values = []
for col in range(ncols):
while True:
selected_row = random.randrange(0, nrows)
selected_val = data[selected_row][col]
if selected_val not in values:
break
print('skip:', selected_val)
print(col, selected_row, '->', selected_val)
values.append(selected_val)
print(values)
with open('data.txt', 'a') as fh:
csv_writer = csv.writer(fh, delimiter=' ')
csv_writer.writerow(values)
https://stackoverflow.com/questions/72363852
复制相似问题