[英]OSError: [Errno 9] Bad file descriptor python 3.7 CSV writer
[英]Python: OSError: [Errno 9] Bad file descriptor occurs while trying to write to csv
我是編程初學者,我盡力自己解決這個錯誤。 在下面的代碼中,我嘗試將一些內容寫入 a.csv 文件,只寫一次文件名(在第 7 行),以使其成為更可持續的代碼。
但是使用下面的代碼我得到一個“發生錯誤的文件描述符”錯誤。 我已經發現發生錯誤的原因可能是 .csv 文件過早關閉。 我不知道為什么,因為我沒有在任何地方調用 close() 。 作為一種解決方法,我可以將代碼中各處的變量數據更改為“NewFile.csv”。
我真的很感激能幫我改進我的編程。
謝謝你的幫助!
import sys
import csv
from qtpy import QtWidgets
from UI.mainwindow import Ui_MainWindow
#Dateiname/-pfad an Variable vergeben
data = "NewFile.csv"
app = QtWidgets.QApplication(sys.argv)
class MainWindow(QtWidgets.QMainWindow):
def __init__(self, parent = None, data=data):
super().__init__(parent)
self.ui = Ui_MainWindow()
self.ui.setupUi(self)
self.setWindowTitle("Studentenverwaltung")
self.ui.NewButton.clicked.connect(self.onNewButtonClick)
self.loadTable(data)
self.ui.SaveButton.clicked.connect(self.onSaveButtonClick)
def loadTable(self, filename):
self.ui.tableWidget.setRowCount(0)
with open(filename, "r", newline="") as file:
filereader = csv.reader(file, delimiter=";", quotechar='"')
for row in filereader:
first = row[0]
last = row[1]
subject = row[2]
print(first + " " + last)
newRow = self.ui.tableWidget.rowCount()
self.ui.tableWidget.insertRow(newRow)
self.ui.tableWidget.setItem(newRow, 0, QtWidgets.QTableWidgetItem(first))
self.ui.tableWidget.setItem(newRow, 1, QtWidgets.QTableWidgetItem(last))
self.ui.tableWidget.setItem(newRow, 2, QtWidgets.QTableWidgetItem(subject))
def onSaveButtonClick(self, data):
with open(data, "w", encoding="utf-8") as file:
filewriter = csv.writer(file, delimiter=";", quotechar='"')
totalRows = self.ui.tableWidget.rowCount()
totalColumns = self.ui.tableWidget.columnCount()
for row in range(totalRows):
rowdata = []
for column in range(totalColumns):
item = self.ui.tableWidget.item(row, column)
if item is not None:
rowdata.append(item.text())
else:
rowdata.append('')
filewriter.writerow(rowdata)
print(rowdata)
def onNewButtonClick(self):
newRow = self.ui.tableWidget.rowCount()
self.ui.tableWidget.insertRow(newRow)
self.ui.tableWidget.setItem(newRow, 0, QtWidgets.QTableWidgetItem(""))
self.ui.tableWidget.setItem(newRow, 1, QtWidgets.QTableWidgetItem(""))
self.ui.tableWidget.setItem(newRow, 2, QtWidgets.QTableWidgetItem(""))
# Cursor auf neue Zelle setzen
editingCell = self.ui.tableWidget.item(newRow, 0)
self.ui.tableWidget.editItem(editingCell)
window = MainWindow()
window.show()
sys.exit(app.exec_())
錯誤信息:
OSError: [Errno 9] Bad file descriptor
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/User/Desktop/Coding/Python/PyQt/main.py", line 57, in onSaveButtonClick
print(rowdata)
OSError: [Errno 9] Bad file descriptor
Process finished with exit code 134 (interrupted by signal 6: SIGABRT)
從onSaveButtonClick
的參數列表中刪除data
參數。
def onSaveButtonClick(self):
當 function 被 Qt 調用時,它不會將文件名作為參數傳遞。 你想為此使用全局變量,並聲明一個參數來隱藏它。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.