拨开荷叶行,寻梦已然成。仙女莲花里,翩翩白鹭情。
IMG-LOGO
主页 文章列表 csv模块不写新行

csv模块不写新行

白鹭 - 2022-01-23 2187 0 0

我正在撰写一个脚本,用于将 Excel 作业簿中的特定单元格读取到串列中,然后从串列中读取到 CSV 中。还有一个回圈可以从档案夹中打开作业簿。

我的代码:

import csv
import openpyxl
import os

path = r'C:\Users.....'  # Folder holding workbooks
workbooks = os.listdir(path)

cell_values = []  # List for storing cell values from worksheets

for workbook in workbooks:  # Workbook iteration
    wb = openpyxl.load_workbook(os.path.join(path, workbook), data_only=True)  # Open workbook
    sheet = wb.active  # Get sheet

    f = open('../record.csv', 'w', newline='')  # Open the CSV file
    cell_list = ["I9", "AK6", "N35"]  # List of cells to check

    with f:  # CSV writer loop
        record_writer = csv.writer(f)  # Open CSV writer

        for cells in cell_list:  # Loop through cell list to get cell values and write them to the cell_values list
            cell_values.append(sheet[cells].value)  # Append cell values to the cell_values list
        record_writer.writerow(cell_values)  # Write cell_values list to CSV

quit()  # Terminate program after all workbooks in the folder have been analyzed

输出只是将所有值放在同一行上,尽管用逗号分隔,但如果所有内容都在同一行,当我在 Excel 中打开结果时,它对我没有帮助。当我使用 时xlrd,格式是垂直的,但我所要做的就是将资料集转置为好的。但我不得不改变xlrd(这通常是一个聪明的举动),因为它不会读取合并的单元格。

我明白了:

4083940,140-21-541,NP,8847060,140-21-736,NP

当我想要这个

4083940,140-21-541,NP
8847060,140-21-736,NP

编辑 - 我忘记了我帖子的“我尝试过什么”部分。我已尝试更改回圈以避免覆写先前对 CSV 的写入。我尝试清除每个回圈上的串列,以使脚本将每个新条目视为新行。\n正如我在几个帖子中看到的那样,我尝试添加作家行。我曾尝试使用writerows而不是writerow. 我尝试了A而不是W即使它是一个修复而不是一个解决方案,但这也不太正常。

uj5u.com热心网友回复:

您的主要问题是cell_values从多个作业表中累积单元格。您需要cell_values = []为每张纸重置它,例如,

我回到你原来的例子,然后:

  • 将record.csv的打开上移,并将所有作业放在打开并写入的档案范围内
  • cell_values = []在您的作业簿回圈内移动
  • 移到cell_list = ["I9", "AK6", "N35"]顶部,因为这确实适用于整个脚本,如果每个作业簿都具有相同的单元格
  • 洗掉quit(),在脚本的最后没有必要,一般应该避免:Python 退出命令 - 为什么这幺多以及何时应该使用每个命令?
import csv
import openpyxl
import os

path = r'C:\Users.....'  # Folder holding workbooks
workbooks = os.listdir(path)

cell_list = ["I9", "AK6", "N35"]  # List of cells to check 

with open('record.csv', 'w', newline='') as f:
    record_writer = csv.writer(f)

    for workbook in workbooks:
        wb = openpyxl.load_workbook(os.path.join(path, workbook), data_only=True)
        sheet = wb.active
        cell_values = []  # reset for every sheet

        for cells in cell_list:
            cell_values.append(sheet[cells].value)

        # Write one row per sheet
        record_writer.writerow(cell_values)

此外,我可以看到您的新 CSV 模块,并且在概念上有点挣扎(因为您尝试过writerow,然后writerows尝试除错您的代码)。Python 的 CSV 官方档案并没有真正给出如何使用它的实际示例尝试在这里阅读,写入 CSV

标签:

0 评论

发表评论

您的电子邮件地址不会被公开。 必填的字段已做标记 *