如何从导出的Python列表中移除逗号、引号和括号?

4 投票
4 回答
14803 浏览
提问于 2025-04-18 07:54

大家上次帮我解答新手问题非常有帮助,所以我想再试一次。目前,我的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 个回答

0

如果还有人像我一样在寻找这个问题(使用的是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()
1

既然你有元组(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))
2

我不知道你是否了解正则表达式,不过使用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
3

你的问题:

我建议你直接使用 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 写入器,你会在每个字母之间得到逗号。

撰写回答