您好我有一个数据库,我正在尝试快速制作.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
这是最好的方法。谢谢。
答案 0 :(得分:1)
您只需写入 None
或空字符串 ''
,即可在 csv 中插入空白“列”。
例如:
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'}
write.writerow(row) # Automatically skips missing keys
答案 1 :(得分:0)
正如Padraic Cunningham所说just insert into each row by index and write
with open('data.csv', 'r') as fdin, open('out.csv', 'w') as fdout:
for line in csv.reader(fdin):
# insert into each row by index
line.insert(1, '')
# and write
csv.writer(fdout).writerow(newline)
答案 2 :(得分:0)
对于未来的读者,我发布了一个使用 Pandas 的替代方法,如果该模块可以读取 csv(就像在原始问题中一样)。
使用 Pandas 及其别名 pd,首先我们用 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
是为了避免将第一行作为标题。我这样做是因为原始问题需要两列完全为空(包括标题),并且数据框不能有两列同名。在我们的例子中,我们为列指定的名称('col1'、'col2')无关紧要,因为我们不会将它们保存在文件中:我们在保存 csv 时指定 header = False
。>
答案 3 :(得分:-1)
这是我的答案,可以帮助你。
首先,我建议在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的内置模块的文件。也就是说,我可能还没有足够深入地掌握熊猫。 : - )