如何从导出的Python列表中移除逗号、引号和括号?
大家上次帮我解答新手问题非常有帮助,所以我想再试一次。目前,我的Python 3代码从一个CSV文件中读取数据,把这些数据存储成一个列表,然后生成这些数据的排列组合,最后再把它们导出到一个新的CSV文件中,格式是列的形式。不过,导出的列表格式并不太适合我需要的用途。我的问题是:我该如何在Python中去掉导出列表中的逗号、括号和圆括号呢?
现在的样子:
('Hello', 'World', 'How')
('Hello', 'World', 'Are')
('Hello', 'How', 'World')
我希望它看起来是这样的:
Hello World How
Hello World Are
Hello How World
这是我正在使用的代码,有人能给我一些建议吗?我在努力学习,所以任何额外的见解都非常感谢!
import csv
import itertools
with open('/users/Desktop/pythondata.csv', 'r') as f:
reader = csv.reader(f)
J = []
for row in reader:
J.extend(row)
C = list(itertools.permutations(J, 3))
with open('THISISATEST.csv','w')as f:
writer=csv.writer(f,lineterminator='\n')
for val in C:
writer.writerow([val])`
附言:如果格式不对,请多多包涵,我还是新手!
4 个回答
如果还有人像我一样在寻找这个问题(使用的是Python 3.x),我想要做的是把一个9位数字的所有可能排列列在不同的行上。
其中这行代码 string = ''.join(str(char) for char in line)
是我找到的最佳解决方案。
import sys, itertools
f = open('path to file', 'w') #I was using a .txt file
permutations = (list(itertools.permutations([1,2,3,4,5,6,7,8,9], 9)))
for line in permutations:
string = ''.join(str(char) for char in line)
f.write(string + '\n')
f.close()
既然你有元组(tuples),那就有更简单的方法。你不需要用csv
来导出一个用空格分隔的文件。
import csv
import itertools
with open('pythondata.csv', 'r') as f:
reader = csv.reader(f)
J = []
for row in reader:
J.extend(row)
C = itertools.permutations(J, 3)
with open('THISISATEST.txt','w') as f:
f.write('\n'.join(' '.join(y for y in x) for x in C))
我不知道你是否了解正则表达式,不过使用Python的're'模块应该能帮你找到你想要的东西:
import re
strs = "('Hello', 'World', 'How')"
#creates list of strings that match the regular expression
words = re.findall(r"\'([A-Za-z]+)\'", strs)
#joins all of the elements of the word array into a string separated by a space
outputString = " ".join(words)
#output is "Hello World How"
print outputString
你的问题:
我建议你直接使用 join
方法来获取你想要的单一字符串。你可以试试:
with open('test.csv', 'w') as a_file:
for result in C:
result = ' '.join(result)
a_file.write(result + '\n')
简单来说,join
方法是用在字符串 ' '
(一个空格)上的,它会把你传入的每个项目(你排列组合的结果)都放在一起,形成一个用你最开始的字符串(这个空格)分开的单一字符串。这个网站提供了一个简单易懂的例子。
join
方法的用法是 '[分隔符]'.join([要连接的项目列表])
,所以如果你想把所有东西都合并成一个没有空格的字符串,你可以在一个空字符串上调用它:''.join([我的列表])
。
因为你不需要一个用逗号分隔的文件(CSV),所以你可以简单地使用 a_file.write
方法,如示例所示。如果你在这段代码中使用 CSV 写入器,你会在每个字母之间得到逗号。