我有python代码,它生成以下输出,
[
['3', 'cs2313', 'someone', 'cs231', 'IT networks', 'cs232', 'IT Workshop', 'cs233', 'IT programming'],
['5', 'ec3325', 'someone', 'ec301', 'Maths2', 'ec302', 'Theory of Circuits', 'ec303', 'PCB design'],
['7', 'cs4890', 'someone', 'cs401', 'Game Theory', 'cs402', 'Systems Programming', 'cs403', 'Automata'],
['1', 'ec1008', 'someone', 'ec101', 'Digitization', 'ec102', 'Analog cicuit design', 'ec103', 'IP Telephony'],
['3', 'cs2002', 'someone', 'cs231', 'IT networks', 'cs232', 'IT Workshop', 'cs233', 'IT programming'],
['3', 'cs2009', 'someone', 'cs231', 'IT networks', 'cs232', 'IT Workshop', 'cs233', 'IT programming']
]我把这个写在档案里
fo=open("result.txt","w")
print ("Name of file: ",fo.name)
for item in x :
fo.write("%s\n"% item)
fo.close()清单如上文所述。但是我希望文件中的输出是
[
'3', 'cs2313', 'someone', 'cs231', 'IT networks', 'cs232', 'IT Workshop', 'cs233', 'IT programming',
'5', 'ec3325', 'someone', 'ec301', 'Maths2', 'ec302', 'Theory of Circuits', 'ec303', 'PCB design',
'7', 'cs4890', 'someone', 'cs401', 'Game Theory', 'cs402', 'Systems Programming', 'cs403', 'Automata',
'1', 'ec1008', 'someone', 'ec101', 'Digitization', 'ec102', 'Analog cicuit design', 'ec103', 'IP Telephony',
'3', 'cs2002', 'someone', 'cs231', 'IT networks', 'cs232', 'IT Workshop', 'cs233', 'IT programming',
'3', 'cs2009', 'someone', 'cs231', 'IT networks', 'cs232', 'IT Workshop', 'cs233', 'IT programming'
]这意味着每个输出行都由一个新的line.Is隔开,那里有一个函数调用相同的或更好的方法,而不是我所写的,可以得到结果。
发布于 2018-08-16 20:52:25
下面是一个使用str.join()的实现
my_list = [
['3', 'cs2313', 'someone', 'cs231', 'IT networks', 'cs232', 'IT Workshop', 'cs233', 'IT programming'],
['5', 'ec3325', 'someone', 'ec301', 'Maths2', 'ec302', 'Theory of Circuits', 'ec303', 'PCB design'],
['7', 'cs4890', 'someone', 'cs401', 'Game Theory', 'cs402', 'Systems Programming', 'cs403', 'Automata'],
['1', 'ec1008', 'someone', 'ec101', 'Digitization', 'ec102', 'Analog cicuit design', 'ec103', 'IP Telephony'],
['3', 'cs2002', 'someone', 'cs231', 'IT networks', 'cs232', 'IT Workshop', 'cs233', 'IT programming'],
['3', 'cs2009', 'someone', 'cs231', 'IT networks', 'cs232', 'IT Workshop', 'cs233', 'IT programming']
]
with open('output_file', 'a+') as f_data:
f_data.write('[\n')
for elm in my_list:
# Maybe you don't need to check if the elm is a list ?
if isinstance(elm, list):
f_data.write(', '.join("'{}'".format(k) for k in elm) + '\n')
f_data.write(']\n')输出:
$> cat output_file
[
'3', 'cs2313', 'someone', 'cs231', 'IT networks', 'cs232', 'IT Workshop', 'cs233', 'IT programming'
'5', 'ec3325', 'someone', 'ec301', 'Maths2', 'ec302', 'Theory of Circuits', 'ec303', 'PCB design'
'7', 'cs4890', 'someone', 'cs401', 'Game Theory', 'cs402', 'Systems Programming', 'cs403', 'Automata'
'1', 'ec1008', 'someone', 'ec101', 'Digitization', 'ec102', 'Analog cicuit design', 'ec103', 'IP Telephony'
'3', 'cs2002', 'someone', 'cs231', 'IT networks', 'cs232', 'IT Workshop', 'cs233', 'IT programming'
'3', 'cs2009', 'someone', 'cs231', 'IT networks', 'cs232', 'IT Workshop', 'cs233', 'IT programming'
]发布于 2018-08-16 20:53:41
这可能是个坏主意,因为你下周就会回来问,“所以我有这个奇怪格式的文件,但我不知道如何解析它…”正如在一条评论中所建议的那样,您几乎肯定希望将它写成一个大JSON文本,或者将它写成一个CSV文件。其中任何一个都是琐碎的编写,就像解析一样琐碎,也是人类可读的和-editable。
但是如果你真的想要这种格式,你只需要精确地计算出如何描述它,然后它应该很容易转换成代码。
所有这些都不会像json.dump(x, fo)或csv.writer(fo).writerows(x)那样简单,但这是因为广泛有用的格式有很好的库来使它们易于编写,而特性格式则不然。
但也没那么难。
例如,我对您的规则的第一个猜测是,您想要的正是列表的回复,但没有括号:
fo.write(str(item).strip('[]') + "\n")当然,这个非常相似的规则也为您的示例提供了相同的输出,但是如果您可能有三层嵌套列表,则会有所不同:
fo.write(str(item)[1:-1] + "\n")这一规则也非常相似,但却微妙地不同:
fo.write(', '.join(map(repr, item)) + "\n")你想要哪一个?我不知道,但你应该知道。
当然,您还在所有行之前都请求了[,在所有行之后都请求了],因此您还必须显式地添加以下内容:
fo.write('[\n')
for item in x :
# whichever rule you wanted from above
fo.write(']\n')从您的编辑来看,您似乎需要一些不寻常的缩进和空行,所以您也必须显式地这样做:
fo.write(' [\n\n')
for item in x:
# whichever rule you wanted from above
# but with a ' ' prefixed to the string
fo.write('\n . ]\n')另外,您的一些行现在以最后的,结束,但其他行则没有。我不知道规则是什么,但同样,如果你能解释它,我相信你可以编码它。
发布于 2018-08-16 20:48:01
您需要每个列表的字符串表示形式减去由comma+linefeed连接的括号,所有这些都封装在括号中。
有一行可以这样做(result是列表列表):
print("[\n{}\n]".format(",\n".join([str(x).strip('[]') for x in result])))指纹:
[
'3', 'cs2313', 'someone', 'cs231', 'IT networks', 'cs232', 'IT Workshop', 'cs233', 'IT programming',
'5', 'ec3325', 'someone', 'ec301', 'Maths2', 'ec302', 'Theory of Circuits', 'ec303', 'PCB design',
'7', 'cs4890', 'someone', 'cs401', 'Game Theory', 'cs402', 'Systems Programming', 'cs403', 'Automata',
'1', 'ec1008', 'someone', 'ec101', 'Digitization', 'ec102', 'Analog cicuit design', 'ec103', 'IP Telephony',
'3', 'cs2002', 'someone', 'cs231', 'IT networks', 'cs232', 'IT Workshop', 'cs233', 'IT programming',
'3', 'cs2009', 'someone', 'cs231', 'IT networks', 'cs232', 'IT Workshop', 'cs233', 'IT programming'
]关键部分是:
str(x).strip('[]'),它创建/保留每个列表的表示,减去括号",\n".join,它将所有列表与comma+linefeed连接起来"[\n{}\n]".format,它将连接的结果封装到brackets+linefeeds中(写入文件,显然用f.write替换print,f是文件句柄)这个解决方案不支持每一行的“缩进”,但是如果通过",\n ".join更改",\n ".join并弥补第一个元素,则非常容易:
print("[\n {}\n]".format(",\n ".join(str(x).strip('[]') for x in result)))https://stackoverflow.com/questions/51884992
复制相似问题