- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我正在使用 python 3.6.0。我之前已经将字典写入 CSV 文件,但从来没有在已经包含文本的行上。我现在遇到麻烦了。这是我的代码:
import csv
f='/Users/[my name]/Documents/Webscraper/tests/output_sheet_1.csv'
bigdict = {'ex_1': 1, 'ex_2': 2, 'ex_3': 3}
with open(f, 'r+') as file:
fieldnames=['ex_1','ex_2','ex_3']
writer = csv.DictWriter(file, fieldnames=fieldnames,delimiter=',')
if '\n' not in file.readline()[-1]:
file.write('\n')
writer.writerow(bigdict)
当我运行它时,python 将字典附加到包含字段名的行之后的第一行,从字段名下方的最后一个单元格开始。换句话说,第一行包含许多条目,包括 ex_1
, ex_2
, 和 ex_3
在最后三个单元格中。在第二行中,我将值存储在所有单元格中,但 ex_1
下的单元格除外。 , ex_2
, 和 ex_3
, 都是空白的。 Python 写入整数 1
下面ex_3
, 并写入 2
和 3
在它右侧的单元格中。
我想重新定位它们,以便每个数字都位于它们各自的字段名单元格下。我该怎么做,为什么会这样?谢谢。
最佳答案
你有两个问题:
如果没有文件(或文件为空),您可能希望添加一个标题行。
如果您要向现有文件追加新行,则您要尝试确保文件中的最后一个字符是换行符。 writerow()
将添加尾随换行符,因此通常这不会成为问题。但是,如果文件已被手动编辑并且尾随换行符丢失,这将导致新行附加到最后一行的末尾。
第一个问题可以通过先测试文件的大小来解决。如果它是 0
那么它存在但是是空的。如果该文件不存在,则会引发 OSError
异常。 write_header
用于发出此信号。
第二个问题有点棘手。如果以二进制模式打开文件,则可以查找到文件的最后一个字节并将其读入。这可以检查它是否是换行符。如果您的文件曾经使用过另一种编码,则需要进行更改。然后可以在追加模式下重新打开文件并写入新行。
这一切都可以按如下方式完成:
import csv
filename = '/Users/[my name]/Documents/Webscraper/tests/output_sheet_1.csv'
bigdict = {'ex_1': 1, 'ex_2': 2, 'ex_3': 3}
# Does the file exist? If not (or it is empty) write a header
try:
write_header = os.path.getsize(filename) == 0
except OSError:
write_header = True
# If the file exists, does it end with a newline?
if write_header:
no_ending_newline = False
else:
with open(filename, 'rb') as f_input:
f_input.seek(-1, 2) # move to the last byte of the file
no_ending_newline = f_input.read() != b'\n'
with open(filename, 'a', newline='') as f_output:
fieldnames = ['ex_1','ex_2','ex_3']
csv_writer = csv.DictWriter(f_output, fieldnames=fieldnames)
if write_header:
csv_writer.writeheader()
if no_ending_newline:
f_output.write('\n')
csv_writer.writerow(bigdict)
关于python - 如何在已经包含文本的行上将字典写入 CSV 文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50979628/
我是一名优秀的程序员,十分优秀!