添加空白/空列的Python. csv

j5fpnvbx  于 2023-02-27  发布在  Python
关注(0)|答案(3)|浏览(345)

你好,我有一个数据库,我正试图使一个.csv文件快速从。
我的数据是这样的。

Song_Name,File_Name,Artist_Name,Artist_ID
Song1,filename1,artistname,artist001
Song1,filename1,artistname,artist001
Song1,filename1,artistname,artist001
Song1,filename1,artistname,artist001

我就想让它看起来像这样。

Song_Name,,File_Name,Artist_Name,,Artist_ID
Song1,,filename1,artistname,,artist001
Song1,,filename1,artistname,,artist001
Song1,,filename1,artistname,,artist001
Song1,,filename1,artistname,,artist001

最好的办法是什么,谢谢.

ubof19bj

ubof19bj1#

您可以在CSV文件中插入空白"列",只需写入None或空字符串''即可。
例如:

with open('songs.csv', 'w', newline='') as f:
    writer = csv.writer(f)
    writer.writerow(
        ['Song_Name', None, 'File_Name', 'Artist_Name', None, 'Artist_ID']
    )  # Write headers
    # Now you iterate over your data:
    for row in data:
        writer.writerow([row['song_name'], None, row['file_name'], ...])

您的CSV文件将正确地包括空白列所需的额外逗号,如果需要,还包括一个尾随逗号。
如果你使用DictWriter,那就更简单了,你不用把你想去掉的键填入字典:

with open('songs.csv', 'w', newline='') as f:
    headers = ['Song_Name', None, 'File_Name', ...]
    writer = csv.DictWriter(f, fieldnames=headers)
    writer.writeheader()
    # Now write a sample row:
    row = {'Song_Name': 'Dumb', 'Artist_Name': 'Nirvana'}
    writer.writerow(row)  # Automatically skips missing keys
up9lanfz

up9lanfz2#

对于未来的读者,我发布了一个替代方法来使用Pandas,如果csv在这个模块中可读的话(就像在最初的问题中一样)。
使用别名为 pdPandas,首先我们使用pd.read_csv读取数据(指定分隔符sep = ',')。然后,我们创建一个DataFrame(df)只包含一个空列。我们将第一个DataFrame中的该列insert到我们想要的位置。然后,我们再次使用df.to_csv将数据保存在csv中。让我们在代码中看到这一点,对于名为test.csv的csv文件:

import pandas as pd

# Read the file.
df = pd.read_csv('test.csv', header = None) 

# Create single (empty) column dataframe with the same number of rows as the original.
empty_col = pd.DataFrame(['']*len(df)) 

# Insert in original dataframe
df.insert(1, 'col1', empty_col) 
df.insert(4, 'col2', empty_col) 

# Save to csv
pd.to_csv('test.csv', index = False, header = False)

然后,我们在文件test.csv中获得以下内容:

Song_Name,,File_Name,Artist_Name,,Artist_ID
Song1,,filename1,artistname,,artist001
Song1,,filename1,artistname,,artist001
Song1,,filename1,artistname,,artist001
Song1,,filename1,artistname,artist001

注意,我选择header = None是为了避免第一行被当作标题。我这样做是因为最初的问题要求两个列完全为空(包括标题),并且一个 Dataframe 不能有两个同名的列。在我们的例子中,我们给予列的名称('col1','col2')并不重要,因为我们不会将它们保存在文件中:我们在保存csv时指定header = False

qnzebej0

qnzebej03#

这是我的答案来帮助你。
首先,我建议在IPython环境中使用Pandas,而不是Python内置的CSV阅读器。Pandas为处理表格数据提供了一些强大的功能。也就是说,下面是使用Python内置的CSV模块可以做的事情。

with open('data.csv', 'r') as infile:
    with open('data_out.csv', 'w') as outfile:
        for line in csv.reader(infile):
            newline = []
            for element in line:
                if line.index(element) in [1, 3]: # crucial part here: identify where you want to make insertions
                    newline.append(' ')
                newline.append(element)
            print(newline)
            csv.writer(outfile).writerow(newline)

至于是使用Pandas还是简单地迭代文件,这要看情况而定--根据我自己的经验,我发现将一个大的CSV文件加载到Pandas中会产生相当大的内存开销,所以我改用Python的内置模块来处理数据文件,也就是说,我可能还没有足够深入地掌握Pandas。:-)

相关问题