Python 如何将以特定字符串开头的多行转换为列?
我想问一下如何使用python将每多行转换为列并保存到文本文件中?我在下面的部分附上了输入和预期输出。根据输入,我想选择以“number”开头的每一行,然后转置到列中 最后,我想将预期的输出保存到文本文件中 输入:Python 如何将以特定字符串开头的多行转换为列?,python,dataframe,reshape,transpose,Python,Dataframe,Reshape,Transpose,我想问一下如何使用python将每多行转换为列并保存到文本文件中?我在下面的部分附上了输入和预期输出。根据输入,我想选择以“number”开头的每一行,然后转置到列中 最后,我想将预期的输出保存到文本文件中 输入: number 12 apple 13 banana 14 number 1 carrot 2 cucumber 3 number 11 pen 10 预期产出: number 12 apple 13 banana 14 number
number
12
apple
13
banana
14
number
1
carrot
2
cucumber
3
number
11
pen
10
预期产出:
number 12 apple 13 banana 14
number 1 carrot 2 cucumber 3
number 11 pen 10
任何帮助都将不胜感激,谢谢 首先,让我们将数据加载到内存中:
with open('input.txt', 'r') as data:
info = data.read()
info = info.split()
现在,让我们将数据配对成(名称、编号)
元组:
list_of_tuples = [(name, int(info[index+1])) for name, index in enumerate(info)]
现在查找您的行:
list_of_rows = []
cur_row = []
for tuple in list_of_tuples:
if tuple[0] == 'number':
if len(cur_row) > 0:
list_of_rows.append(cur_row)
cur_row.clear()
cur_row.append(tuple)
list_of_rows.append(cur_row)
现在将其加载到文本文件中:
with open('out.txt', 'w') as out:
for row in list_of_rows:
out.write('\t'.join(row))
代码是头脑编译的,所以如果您遇到问题,请告诉我…关于阅读和编写文本文件还有其他问题,所以我将把这些留给您作为练习 假设您已将输入文件加载为
记录
:
records = ['number', '12', 'apple', '13', 'banana', '14', 'number', '1', 'carrot', '2', 'cucumber', '3', 'number', '11', 'pen', '10']
您要做的是循环每个记录
,如果它是“number”
,则创建一个新行,然后将记录
添加到最近的一行。该代码的作用是:
rows = []
for record in records:
if record == 'number':
# Create a new row
rows.append([])
# Append to the last row
rows[-1].append(record)
行
将如下所示:
[['number', '12', 'apple', '13', 'banana', '14'],
['number', '1', 'carrot', '2', 'cucumber', '3'],
['number', '11', 'pen', '10']]
对不起,我输入的输入,输入的呈现方式是我尝试过的,我不知道为什么会这样,请看一下我上传到google drive的图像,非常感谢!!预期输出文件的类型是什么?您好,先生,预期输出文件是.txt格式(文本文件格式)。如果预期输出文件是.xlsx或.csv格式(excel文件格式),也很酷。您已经尝试了什么?您已经
枚举
向后-它返回索引,值
元组。我自己也没有测试过,但它似乎会产生复制品;我想你想要enumerate(info[::2])
Hi,cuniculus,我已经运行了你的代码,但似乎遇到了一些其他问题,这里有一个错误:``list\u of tuples=[(name,int(info[index+1])for name,index in enumerate(info)]TypeError:只能将str而不是“int”)连接到str``我仍然无法找出错误..好的,wjandrea,我会试试你的建议,谢谢。顺便问一下,你们怎么把代码/数据放到浅灰色的盒子里?我已经试过了,但我运气不好…@EdisonToh实际上我正在尝试我的建议,但无法让它发挥作用。我很快会补充另一条评论。对于灰色框,请参见Markdown Help页面,因此我更改了list_of tuples=[(name,int(info[index+1])作为索引,如果不是name.isdigit()],则在enumerate(info)中命名为name.isdigit()]
,但是list_of_rows
则是[('number',11)],[('number',11)],[('number',11)],[('number',11)]
@EdisonToh好极了,很乐意帮助!如果您认为我的答案最有用,请勾选左侧的复选框,将其标记为“已接受”,并有效地将您的问题标记为“已回答”。非常感谢您的帮助!!除了勾选左边的复选框外,还有其他方式给你评分吗?答案左边的复选框中是否有“勾号”?如果是这样的话,我已经点击了。@EdisonToh是的,你可以点击左边的向上箭头,向上投票任何你认为有用的答案。是的,您正确地找到了“接受”按钮。