В вашем цикле вы можете использовать isspace
, чтобы проверить, является ли элемент только пробелами (или даже символами табуляции и переносами), прежде чем обновлять его в Excel:
# This will fill rows 1 and 3 but you can change that as per your use case
count = 0
for data in Sample_list:
if not data or data.isspace():
continue
Sheet.cell(row = 1 if count % 2 == 0 else 3, column = col).value = data
col+=count % 2 # Column only increments when count is odd
count+=1
ИЛИ вы можете удалить все пробелы из списка заранее:
Sample_list = [elem for elem in Sample_list if not elem.isspace()]
Просто требуется имя файла
.
Да, он будет импортирован дважды, если вы укажете имя файла
и ./ имя файла
, так что не делай этого. Вы не указываете .rb
, поэтому не указывайте путь. Я обычно помещаю большую часть своей логики приложения в файл в lib
, а затем у меня есть скрипт в bin
, который выглядит примерно так:
#!/usr/bin/env ruby
$: << File.join(File.dirname(__FILE__), "/../lib")
require 'app.rb'
App.new.run(ARGV)
Еще одним преимуществом является то, что я нахожу его проще выполнить модульное тестирование, если загрузка логики приложения не запускается автоматически.
Вышеописанное будет работать, даже если вы запускаете скрипт из какого-то другого каталога. Тем не менее, внутри того же каталога более короткие формы, на которые вы ссылаетесь, работают так, как ожидается, и, по крайней мере, для ruby 1.9 не приведут к двойному требованию.
puts "start test A"
require 'testb'
require './testb'
puts "finish test A"
puts "start test B"
puts "finish test B"
выполняется 'ruby testa .rb 'приведет к:
start test A
start test B
finish test B
finish test A
Однако более длинная форма будет работать даже из другого каталога (например, ruby somedir / script.rb)
Поместите это в каталог стандартной библиотеки (где-то, который уже находится в вашем пути загрузки по умолчанию $:
):
# push-loadpath.rb
if caller.first
$: << File.expand_path(File.dirname(caller.first))
end
Тогда это должно работать
% ls /path/to/
bin.rb lib1.rb lib2.rb #...
% cat /path/to/bin.rb
load 'push-loadpath.rb'
require 'lib1'
require 'lib2'
#...
вызывающий
дает вам доступ к текущему стеку вызовов и сообщает, какой файл и где, поэтому push-loadpath.rb
использует его для добавления файла, который загружает
его в loadpath.
Обратите внимание, что вы должны загрузить
файл, а не требовать
его, чтобы тело могло быть вызвано несколько раз (по одному разу для каждого, когда вы хотите изменить путь загрузки).
С другой стороны, вы можете обернуть тело методом,
# push-loadpath.rb
def push_loadpath
$: << File.expand_path(File.dirname(caller.first))
end
Это позволит вам потребовать
его и использовать его следующим образом:
% ls /path/to/
bin.rb lib1.rb lib2.rb #...
% cat /path/to/bin.rb
require 'push-loadpath'
push_loadpath
require 'lib1'
require 'lib2'
#...